From 82194f5cef6a1a9e3a7b4c34b2e3040a31cc596a Mon Sep 17 00:00:00 2001 From: hal9 Date: Sat, 19 Jan 2008 15:06:20 +0000 Subject: [PATCH] Rebuilt for 3.0.8 stable release. --- INSTALL | 4 +- README | 37 +- doc/pdf/privoxy-developer-manual.pdf | Bin 350967 -> 350959 bytes doc/pdf/privoxy-faq.pdf | Bin 501828 -> 501948 bytes doc/pdf/privoxy-user-manual.pdf | Bin 814051 -> 813723 bytes doc/text/developer-manual.txt | 314 +++++------ doc/text/faq.txt | 296 +++++----- doc/text/user-manual.txt | 795 ++++++++++++++------------- privoxy.1 | 5 +- 9 files changed, 728 insertions(+), 723 deletions(-) diff --git a/INSTALL b/INSTALL index 30eba67a..1a57e653 100644 --- a/INSTALL +++ b/INSTALL @@ -40,8 +40,8 @@ compiler like gcc are required. When building from a source tarball, first unpack the source: - tar xzvf privoxy-3.0.7-beta-src* [.tgz or .tar.gz] - cd privoxy-3.0.7-beta + tar xzvf privoxy-3.0.8-src* [.tgz or .tar.gz] + cd privoxy-3.0.8 For retrieving the current CVS sources, you'll need a CVS client installed. diff --git a/README b/README index b6e9fd53..5062f2b9 100644 --- a/README +++ b/README @@ -4,7 +4,7 @@ * * Purpose : README file to give a short intro. * - * Copyright : Written by and Copyright (C) 2001-2007 the SourceForge + * Copyright : Written by and Copyright (C) 2001-2008 the SourceForge * Privoxy team. http://www.privoxy.org/ * * Based on the Internet Junkbuster originally written @@ -32,9 +32,8 @@ * *********************************************************************/ -This README is included with the development version of Privoxy 3.0.7. See -http://www.privoxy.org/ for more information. The current code maturity level -is "beta", but seems stable to us :). +This README is included with Privoxy 3.0.8. See http://www.privoxy.org/ for +more information. The current code maturity level is "stable". ------------------------------------------------------------------------------- @@ -51,11 +50,15 @@ Privoxy is based on Internet Junkbuster (tm). 1. IMPORTANT CHANGES -December 2007, Privoxy 3.0.7 beta is released. This is a significant upgrade -with many new and enhanced features, and many bugs fixed. See the "ChangeLog", -and the "What's New" section and the "Upgrader's Notes" in the User Manual for -details and specifics. There are changes related to configuration, so anyone -upgrading and keeping their old configuration should read ahead first. +NEWS! January 2008, Privoxy 3.0.8 stable is released. This is a significant +upgrade with many new and enhanced features, and many bugs fixed. All Privoxy +users are encouraged to upgrade. See the "ChangeLog", and the "What's New" +section and the "Upgrader's Notes" in the User Manual for details and +specifics. There are changes related to configuration, so anyone upgrading and +keeping their old configuration should read ahead first. + +December 2007, Privoxy 3.0.7 is released. This is a beta release in preparation +for the forthcoming 3.0.8 release. NEWS! November 2006, Privoxy 3.0.6 stable is released. This is a significant upgrade with many new and enhanced features, and many bugs fixed. @@ -112,22 +115,16 @@ try it with FTP or other protocols for the simple reason it does not work. The actions list can be configured via the web interface accessed via http:// p.p/, as well other options. -All configuration files are subject to unannounced changes during the -development process. - ------------------------------------------------------------------------------- 5. DOCUMENTATION -There should be documentation in the 'doc' subdirectory, but it may not be -completed at this point. In particular, see the User Manual there, the FAQ, and -those interested in Privoxy development, should look at developer-manual. +There should be documentation in the 'doc' subdirectory. In particular, see the +User Manual there, the FAQ, and those interested in Privoxy development, should +look at developer-manual. -The most up to date source of information on the current development version, -may still be either comments in the source code, or the included configuration -files. The source and configuration files are all well commented. The main -configuration files are: 'config', 'default.action', and 'default.filter' in -the top-level source directory. +The source and configuration files are all well commented. The main +configuration files are: 'config', 'default.action', and 'default.filter'. Included documentation may vary according to platform and packager. All documentation is posted on http://www.privoxy.org, in case you don't have it, diff --git a/doc/pdf/privoxy-developer-manual.pdf b/doc/pdf/privoxy-developer-manual.pdf index c628010e3d9177705ed83b3772c63ebd154f8408..a849f71241b89e43b8cc2f362774bea843b7cb76 100644 GIT binary patch delta 15876 zcmai5cRbbY`?ohyNXkwmCC>9T`Bef<*;**cxF!*0}q*f$wEZ({v_%8(i26!WZBkPe3q??Qz$pAMsT^q|Ehd-K3I&z|yD<(u>DW)^CvN0Q%^^lL`U)Fy8?w6kBico%AO0v8I+E zq*}BjXf&Sb7b!E&z&Q=V>_1S6c_bu~$WAF65L;iqTp;PNgfhOc^%|+3McP+IJvX%j z=fPJfTaHUgPQ96*>a$RiUdWz|3o}U$W)_gFeNYFNbaH**N5dP>;&bJkIQ{cyjT{eJ zkR1;W0?G^Jl%Ct%c=b}tvDJJ-ZpB=WY2gy9Au~3Bm!=VilYS`if>W0PH4WX4dH2Eu z?yuK+>n3wBR7JG(^lj}?9_Ea=fsT$86*AS*^X{`Bs>S6jV3{N1-)~?2h*hr-zetnK z7cKav!}p5v+(EX;_D`!UG5bp8$)coZkxi%OJbp$wdEM`=_O4cDi@AyzaQ1-LycVtB zTntP19hjx1gW@FUHyH-b#a&>c&45g08&2As?TN05w9m7$zL|)=mppxmvc=fPx7*_T zu63e=bW$WNyBQx^ajrsv){^>*L&p44lsqNEUcXfgW@S6dl2VkfA9A%>B4STY7oxmUS2eS+{&p7 zmEJFlWdBIRdF}OLSY7fwN!4~P&v>nfS5Kh3&137qqWTZ#O!z5EYV!r;Fh(^r^qRRk zS3e8L=6ri?>Vzv|(w&Eht(W-dC>vcwWpk{3&(OzeC1#IL4C!}#ijU^-gQ82FJ zo+q|ST=x^Tcwj2@d9(Yr+cu4Nz3b=tH^gK#$|Sc>){m=@aS$_Smpjn>>}0BoqRDJ} zv-3vm)hbm^J&hV!hb#_>;{M|$De2~Z$I8r+#*4W8mYLRU7t>*X<>GFg{X^Q`Bq&>T z;t6B(?R28$fZ~u~=F5tFDv^lchw^MUg?>p?DmW_YwM z`^$aVN|lipoS|a=TFh@1pLkCU^jwK}S0;0nocZ+mB53cE0M+1T_ff>xNvHPgiLyLx zVMV2g+NdXx1a{nsF#R6&;&@fE$I`6w_-EaS6gh^E%5!NLt%H{JLt(Y2(rn!Yv^JhU zNsl7(agL*IKI>IjA6C1Ju33AIXj1gGY4O8D&hf%4F`1ExJd#_+z55XLsJ9J0%@=ee zV>4fArtH65j}Up@_0~5ya|Ky-h@^pWuJ3Ytz&8WWrvjr_6H_s<}%xX<|pUK@ID* zU&7Cs51cIy*TDt#T)j_)$_(HjJNe;G_~TPb@p}QR#_*>YvLgnPaB;c(ByuVWWA3Se zUl|lv1U8k=T@^<6yTaN>0u?RYnG{0h6YkZ)_6!zDSl3{X;7^QZZE`(F@ zkYbL(zJD&_x(iBc?Sg}9oY&O`2db|!UOJ0Jv&3=xgF~8RRKDu9iTCH@v}>eWbquBB_B78D8K-&k(VcxQXPsoF^`pF7 z;Lf`TSMVeX@-J_dy>Bs(;dI{)hr5!vtj8sWk*hsZuMn_|jU(a7Pj9A-c%_`0ZfLAS z%it$U&rbe?_s)V`PVH7l!>USs%Kxr9We z7Xq>h=0?exE-zQa-!_Euu@;BQy|pI!vK*lAfBr39+>HAkU9`)UmS;9fzT(fYT*Ssr zjg8)qE(BNRt?zqKp5|t5+3DcHO^^A3~ z_MAaGv??LU7eh^0$xHh<;oV8u`C@sF#RZR9$H$^q>^<&~?UI++P>jnePg9*|k3e@h zDWmIujpedZTUgT2ld1*?M`aej%QpE8iRDr24;>k)#4iXJuvDZAR!Ls9t6Dwa)nN?t zIKo$0{>1q$bbQP3srlIFekC$dQ8D4deK*0_^Lp2X$eE|=7}AMsK4A||q&M}1lt;4C z~6(cc@ub6!$=Zu`Nrge6e3<941#&*Qr}R{YKrP z)QVHquR*UYA(-0wGh<@Ek>Q?FgnNLKaFi{d)SwoQyEY|JdN8*_iE*8pMu@o5w_-b3 zTxHa=JfeD8oKgiDN;e_B-yg?falS=0#*U^xKv7UH_@zBnLG`W}C2KnGitws1mPZS#0-+TMDiNjOcXs2O~gR6n@=vD5Jn>rVJroGR&@msq?DamEl;@Z7P z^~T({nHD)GZZcAv_>cM8|2VCt{Mcr(@1QNC`9jqBBCh%NE2w0uE_E-qQD2S;?3{*Y zbDBH~H>8v#c0DPsSk-?7`bEYyZF=)r*(an11ZPDoTmP{4#mVA3dx(*zRtiu z7sUO0GEUoy@OlWsE=aAq&;MwAbd#1r)g8q#aj@0H>Bma`lYStx=zjIf@S?oz=SfQ& z*{`yQCrk4w4l-}@IHGseTPhalZHr*Ficg;qonvDX-l#XY=Ni1jZSz5$o1wh($YRcM zCW``x5^*~6;W$dLB7ZG4!aFBAz{i##f^b75Y1C=B*2`i>9g-%n@1 zb@GE91y1-ursDl2mxtsG67fDNqf5El4UYFx8(I#!L-`E_j9Mxhs{y1DeGdH(x z?z7+h-Z#{h#QE%Y?8*fTK`**>nUfErn@z|174QPjUyiN+*mbzlYV}3Eb0l);9g7)5 z)(q}$8I0qqG9*@roSS(EiBjq=Tc=^_uaKb`yqzWt634Wnice4xpXfTZWo)esIb=6e$OxEIiKP+c_$#xXB3wQZ!gGJNE*6gH#qLyYn#GK zZ`3-Jm+hw5S+muZJYTJd&5zg2)I!gvQw*yt(4pL|SQ~{|U?rMjccO$i=%0T}(Y_ou zhR%De&-fw-FMSQ6$Rkv)dDE*{V^X@OLHQ<3DY2>0tTnKFQ#rjKSnpuUP~ce@>)Dk#drm}4Aof_wPN4KrRaV&E-(zbxt6hTkHKy+GT3mH zY?@?~Sb{s#TA01)*VH7fen@>udJZwwWQx)RrxCka-xVw#?>XtcRgTT*zxs8Egv)329T3DJt*F<8i9}F1^8vzqi@) zWnIlIw;!^9>l72t+1sPR^0E$t&nkJt<=MdW?+vU^1T6yNR9|L^=Z2agi_KCOJVr_k zP${_ga!)-1zs)_(l6yRQkt2b)bgKv#MCa<;;&jIG@M=lk^HHPMlWJ9)yXAeyH4&kS`V!dbG%YHsJtthH;TQU>T_@y z$3!y+>(U36WAUXQ6F1_EOfH^^sZQn*yWXRRvyIIx7>V@plgvCj;@cJw4$EfcMJ2vx zt)#!1RiPsEUFOg@xFM49w3O9QFGfY1Svfc_{1&6Idt;DNGr9k3I9_bqDBQ`t+UWw05jaK*aKDKKUn z!^kj66Q(dNEZd|Fk2o@?T-aNeT6M#tuk(mCxgd&T$?+AR5E{f!c#mY6ZqHMXex zq#29c#835VvH~tHF`M@;?N{zLti-acR^T3}S(V1r1d9n~y|^3QFzG1PbE)S(o?Pet z{-TAm*N=5X-u9uu&#~2=iJf*0y!br7Zrs+U%H2q2#YvLsT!t*VLR#_(qe7e?so6^D zCr9U9C7#h0`nAhJ#2#EfYu<%9{#dV`bEYmsL@FZvo6 zGP#s^?Z)JF!J(+8b6etyN4b2Td^X~POF!i=z6hY`sxg30J}a`PoE>~~?W9`8lJ0du zy9jh>~lj{dJFQhsK~oBWrLgL2Eor{ z7niSk4^31zHrz>=P+|5A+(fsfBlA!!1~U1gysWF04TB$0qHhG;t zZ|jTdo?bMwsaEw-rx!HE3bK`vgE=QsT(C}shRx;0b2G{n`Zs!YZ7#RBX6_sj zFL~X3UjHnUtVb9Jg@H!G$y-J-ALN<+rc7KD!-AE)h}zl53hV4n>DUh=n!n#jpYj-Bdk@GyOUpEYL0Z~aUl9FBwLb~`-i98&E&)H6;N*nKZ5J>qJX(D!<`Ezzs% zB&YbPm<7hY!5*(G%u4kq*&yoHory2*cOPh7!f&XmawXiws=dlHpw8p(-ZU#^(u6ul zeX!-9-JQNi7h{-*)qiB^>#~0I((g=Vrpc>~Ylg#Qy3w|>7O!r<^}n>peun)suD-i% zdH=p`!YkjmR!dduhi_g_k4IU%KfTuUXfM_YW`pD${*>9|O+u^E8k7y2&?>hZ`XYB> z(L>AF&+P|8p(`Cv`(9jfl*I#iH>QDw*b%;A)ZP8VeqD{Xj^`fO#jndRW*ZqZ*Yx#9 zE!E~sCFP6 z8q1AFe!ZnT&xan0j1@}{#^zvosh+ZXzMv^R`=}%zb%|eD=fro|yR;U=kdmJXyo$BF z5vDB4`T>e(dzK|@tZH_u``n97X;{bKI9U|mel2gc=`PZnn3K8nAW7cY>vSm=$3FKk zTR)YYS2j^~N@Z-$G362bvD=x~&;V+&lTcRt{R$5rHO^4V=GgMy>XH<*D>HOXp($lY&YiKemYF9tUSH4GnRX(G~H)y$2r+e0CLN?2A z+W&f_VN$T^vqSm8wc9$H**7mG-oP1ew{m_hZBjV9XB_8vy=zPVeL9tXugDXN1S7s* zOBKTf9XIeyh2Eu6Z#<~Yo?)VA!Zd4(mkz6|NGg3u1F7w24 zW%xneK(@~u-x94*&zE_RBk?vI@VBW|a#>_1b{ z5K>Whw=hUsFcUI(&6yE+Q$jmfWww=9{wO6{IXX(nQCr6AP*}O)#3ngEt14?FBY8DwFJxD|GEWCl4ijaf zYy2Dy!;G=+%as>$5N0@-^2eyCqK~uDXkI-6BfAgkIu1A@s<3Yx3y5oTjNX_4%E#>A|__7b{%#xKBqOK7Evx`H#=B zjBI_eaU$86Tphe|tF2lBYC7=+!s5g3zVK7EP}JLop2MUAr6uzWP8qn48{4wzz@2V^ z^$s>ctOEFN&sxtw8dK7gD2mgjtHi=(DmC^_wsQxC+)ESw5aClEwbZP1W3pQ<#F{wE zlwGh5Z^JB};1j~^NPUwE8VP|}7)Q%*F6Mv8_8Vs}fwbWuOuom?%1i^yB|zn zYC7)dHdKFH+%Io|?-GfkKkanSceQ2kbIK$dOweZ2LhfY*d<=y3cCB*C*Sy3>4B zO!7+F09kA7#lt&?3e%mxND)Szwx< z#l#?(=Xc@aX*?0do9Kb87C+eI={a)auVCn-#$jFFsa0CX_ z)mGRhoF-74lP0dQVIAb=AL6aXdqz_0K9L9;=r$WrkO|sG#E&WFC~MyRSUJVRKdw70 z++B6|#3eeac<)t!yRRJ4pif?5D&9&vdMh?4xyNp_UTwA z%xr)vt}RXN&1KE9xRnU5SiO6&%U4_n_iY=kA2R$y4|5}5tT7bLglfEz#CZvzRkiW1!lViM*nrF|BB2=9(0 zD>*4@=OugUu8ebXF#YJo#e}x}FSlKr9T}8TN>B2#{|8EaX85y~(meGi4Qyn`I8j=O5gB*E@ zWj1a`HuRx(UW-zIkcyIaQyJpicd6=IJR)?`#MxF>fqWG;UlcPcU=*3&b}Zv|lPm(v z-qEnkR9u)_4LAE4wXclM-(C{Q_R*8@p>ACzrM7Z}XFEv=7LDQ>!i9Le~pBWNUYj~BlVV2dg z)O_S4vc_4T*w~Hq1R3R3m1GTG_YjwiFp2pP%q`tTh;tp7k!c^ldjrd ztDUbCey=L@sJun`9hBpi@sh|j!zb5i8*wX&AM15L-P>$>Zb}#3FO(rCulT67_SBo3 zkDQjM7M07!w^T?}_*%;z2(Uq-xXbb^Lr}cj8p|p~`gUp4|;IIAalhxVak8M!Y291fa65!g;9|rOwF%Cjse7K z#kCmsE5e13e3Z^MH1v;0yc6I==}kPD_`3X6eu39i6i3m^57U zgs6hy43z?3y1EN}`-wNpR^?~t`<&iKcey=feEY+fH#VGEXLx*p$mYG~cy%R*NNmoT zpDX7jOpHIsFjg{tE3qUic_+hJ7!cI))#cWY*2{`hdNS#Eby69*)_CZ$Z;xi8mQ~$s z2R=xgToCd0v6&oSxmw$rp;42k>=+!iYI<^>>!!UdC6mF^zNpQmFgnWad-vXrjEP52 zLNekVfv+fBhO_QMyGG8rVx(tkhcO=F)TFCtLP7mok=J@ z!f#TP^BWBuY~3B-FW)(BcT39||9G72Ck_q;6Xe&5ZE#nx$3_$eH)c2RksE^FMr?5idI9Z0?u^i&ZPCJUZwy!9 zq9uYR43Qq?$}u~@g;eBqP>bcBzjlhjZWS~1)la6~w#&{}SW2R`b0nFkRq~+)vyu{m zUZLxpfD&7+XUoner-negg@XYReIe27HqkeIIpQ7*^-O!ds4ZJibpWlv5VY(L2 zpsmtv+5W+f#_uJgPYWtE8)026_FsLhtTHT@e0VPd72UEbiqJ z+Q0a6;Jm4!a%K1XL33yOle?K|TkO{p7{021jT$Xw#W877OVhgxxy`uT3A`?vQl?7( zS?keg2!rCfN5!y>eb-{WrJ>Cki5^3md-6((Q^aP4-_u9zhEGDS+v_XMoTnE4X3GBj zkxP|=yrUm+@`9%Rs*DM35)+MrwFkxQVf{qsI6my2zWdbF72l>qXqw5u^L|z?_8Q8^ zB=IvJE)CHljVn@huxYpozv<1nwDMUteDEqOPDPIilgK+6JI6N`+q38QSm7&l z%X;g{^$OYE57^w5X06>1-#(f9lvBQ7H99BPc-4NJXHSU2LE%>W+c(&<(h!4>^Cm8d zPS)Z{!!ca!n0FhzeG2{Rel1`vfR!=)j^Y+2xk%ae1zG)D*ZLC zEm}CZM+O(*ZC023w!Cb+fs%*Zjl$@i{eT7yN>HJy(}22NK3#XCFZRxw{(FX8;^YQL zwE3l>-jwrtIt5RNvoABOv_GXR3hrQ}^7Rs`$>cq&8nhLfSF3rM|IS!A&#fENq)&Ly zeQvvrmG9Bp|7c!w&e!b|RN11w>$>KTyp@B|jDufHxIu?xP390KxP{oPS@;fPN57!z z)h1(Xa*Wy0D4kuwe2vtXT`8~dEFnZmaRv98)GD(xtKxML3r-iAd>nW(3^UZKLjufG zdWp`PGPQWC>0J)xu0bI+Y*`I`CWS^`QFA>$LQ*CHtC)GQQNd~8`cfY1RWWBLs zlsVM;Q7<`CZA|t1wg^f5`*`ch%4F*z^uz%+lfLY8?(UbqJXYpKo0=6GzExo|$A`tW z3CZ`9&pT&dAwn9kN(;wM*M|FseHgTX2*&?Z7|g+Sd~Cb-BihC!5Ko$vS}k~8SlyOg zrMoZlrPwz?bF`d=uSUel2m7-w%=aE0=oXiIkB6-nSQJcl5;Jt+zc!#@xtcO-$q@q5Sba5&!fBDpOI0*)WPNbXIHu2&TzZ(_zF zxFN?cZYOS<<98SW14Uy>48};3yPm9RdNEa{T&D9}))Ehk`-=T!;H@AsT`PJ&Xpp zGoeBZ1P+#A|5EsyJ}eYTxDE?}{9A?tP7M6E56EgP6a$vQP@t1w;Yg6tSOfxuDi#R` z%TO>V4rC$v*qi@`5R1lwP{3j^U}LaoLYE*R5IEtpNC*`6Hww7F{f>mdKyV=;a0sC> zNC*M~B`^?>VZfUpF@(q^134@?Po4}wbkUkg;M(7e85(bA7MkXNp4~2;TP>6*8?<9X81cv%waQ)A9 zFcb!CAQ}xA_y_*~%UL801BMWW{SSp$P|70V5Kxgq!l5V-f^Zn}pV-3vS@n?c;~||O z7T^d_&LZJ}O3*qa1{8#FP^80<0H~m6h2TKF1u4XU(+T)(!I^91r+|6|vJ(LXXD$K? z_80>3 z^hW?;fci~nCI&op2}m9A zNB^{izl$k=64-Vm{>HHi6gXxvC^XnwG`PNF(D>|Q6&S!YLIW`fFwz)slwz>>4L}7B zOW4tYA_D=}BP;|7iVG|h%p|Z-5O+cXT@V!0SQz{d(;0pT7vQ{cO2Dyzs!w<!=2*pl5E_8OfxyKg(V$SkqVQ1VWB-8rB^C{$u1GA9vLI{G_&`7f4u~qy zM;J6Ha$AW%4AU;r`@TS5Umk`QS?24YYs z2psRKa_lTn;{`s#f^7#kV-y5|Z#z~25Fi4WP!J@D@Sz~UKhQc9o=NrCSs*@v0!S4h z(tr$27{(|F25$zaz+q5eaIv6~1_k_S0oYnB7KAMn0tZK8_zz%=r z((mj84Fyt%z@2F5AEfeMB^M2BLU?X849p*aE(vOhXkcpl-M~NC2O5I_RaxL1ptJ<~ z4k!~a0Jwz4V1V*Q=q!K&fQ-SwQ8I{s02EmijsRBp@!tx8WuTi8I50^6n@0g-IRp;OZU08= zcoiWEa0tNf|H}IR-Il;1ND%1scHG7#4pY zpZ*~IfDAzxNI(mQ5l&Bl3>Yo`r4Y~u#4n+NPz)&g;edmY7=qgpK!_x)U&o*l7EVA0 z;*@Y;#w9G+fDB964S{J9=yHD<{r7DNAcPSH4L|@PgwzR;!3aqzFlxXFGvZiASoHuI zf-tplfDlE<2>=-y6kIUidWazUfptI(6TlAxF24v`3LF@?L4gUR9nevZ>)$_w3s{IC z90ULv(BVLvp#P5GznL(w4k$ICbwGj=$o@#Nzh!^jmcW6bm5_`8G9Wp!w&E)=pG4> z0Rt1kZ3!R*oJY6`xN*SY03-W5g8#ab0c3FS#>ZEoAbqIc3KGYk`3{6NA%_7JV(@J` z#{&UD&49oGLqUmgyq=(91M3ikSH*w~2?i35CLDZ$b(lX*`i&w0LV#Qo9tfzWppAh+ z8ssemf{?2N_8~zf10V?hirM27IlfE+1w0&qCFG94;eZ-TXdn_OE+E-|7z0f3;B{ym z;Y@XmAmOkHhXd4|fDQmM(3K$|10tEw7~qBn6ecL31OKt^ABq4xj3VS5fDFW-0T~w5 zw}89&8@D&PwTC=_p^PcCi@ z-1%S-2un){6k%qLF}J`%&0&@pE8r3W1AGKWNnZJXR~Si3(zv;s-EsH2V`WVPR6!&J MNyE=Cry)=Ce{JJMs{jB1 delta 15848 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 MwSa)4h7$Gv0j$_(MgRZ+ diff --git a/doc/pdf/privoxy-faq.pdf b/doc/pdf/privoxy-faq.pdf index 70911890ca1eccccab6cf90d541eb7171770c287..81e7e4c33e05310987eb6fc7296c99bc0ff6e650 100644 GIT binary patch delta 21800 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 M1eYw)+Ndq~e}ZNTegFUf delta 21784 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 x4=-g{LHMw|K?8YW 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

4L}e{7lXvM|JeXuR28;c#w=|o=nkWb8>fnMj zAY`U&=71X@4c^rTn*ITS#B?T;9%;vbf_NkI3FH@!jtefc1D@+rua_kg=5@yK0aEpl zwxFzy0sZ}g+QK(sH!@|0pK`bSRuMwW{1v!(J@LSb8z3DKKooF&6~eW!btHgL88FnKrh;CRQ8)4`E-Ceu6PW|*x}U_E=)qBh z7O=|-0wQ=ZRR1&{S>j!G15^}WZCnX&dVlbmLFAS~NCrTc?7+`JHOU6~ZM>$2_HWg~ zt%CVVaK7Vrl z(LOzc4WnlABqYavw*xj!G9Dx9-J}xKAFKHRB9)ta_ z>gU#Zz+{)far!wfZQL=aQr2H8Gd3k%=l$2LE|9(~y>@g;YOmTceHz+vE6l|+D^M9x;e}>gifoCb{2svYoKNU!cg|U>TVTFr_~@=_^A5iXOC1xPw4LNC7U}_;njmMBvSPOLqdQOF$a)yrqUKhg}bL`O{JP1|q1f0zHZA^f-t(scquMdeZ<%9mIFz!2JT ztIgrB30KL7dSZ-0+^ z?13)GWG@dyN%ag@s8x*)J1YBy&8(L%TcGvhbi&7dXOO04BK?ST$`GM-6_b!H$bRh$ zCtG+zU-&=XdHjuoMa`c_H4w7K1IQB{S|dQTP*!D`upp)RMNb>+&!F1NOFooPqdB>$ zKrp3prOn7je!%42qvImOQiviI(sBz~%H{JmgpLN-r=uy9I^&L^Cd%b&hB(U;K~Q*D zQ*jmCDQf{c>Na7`IvCV=JD81fX_3ISJUy~PP=?1X4%CGYH?&o5O_V_dYV8$5;`-cX zO_hGb%d799YK==*hQ~D{Sg8}iE;GbgY5?qb*ik67(!`--!Vmjh=RBc6d_br=VS#%jvt%Riy_pfvhQXk6Y8(PS|dX#FRR zi~6%~3I8SPy~!eGMMkQ8dD?~umx}-5V;Zf3>bzyOzkG4L3J5SgP7}Ok{3_JT<5j?) z>Tz1PC8I_2^2T4VK|hXt>T%9J%KYKa1b-G2J7h|On{3G*?^mk{D_^x_sEq#L{s6>vA%@<2r0Yj#3j*KE&M1QRb=fu_gXj*B6h|$<@Y9J@5s-qK`kQt3{A_$O;ce-yW7$YQn1ocx`UTpDx zp6!&P`f2)#kdTYQa^iUORqoYKX9awu)DL8db(hw58(|tUB`H+f#0t{^rUn{FkJbe| z^Eh|Ri16N-ecv&hr*?<^#=bu4q_VC^S-%jA$a15Bgcfyp_KjVJjpy`^3G>w`se_e zIIC$ogBzmP10BZ{9d1;0A4EmAfLn-32VP4hP#Cq-?5elCF+ymyyJ}{p3j(%8P&>hP zMx;px7&J|Im(p3}707OP1)BN%;f)R+9M#uK2N?ZXaS}2*$*5Gvjj#;`tWwYVI)mc6 zx*}gmS@jOcArT54Pv%-Ppa1jN^ z6XSaBZhpakd^GF<0bH5{XBP8yJb;Sx$n+@-VM9H}XM}RMG!Ri63aV~a7>y9#LDo-` zn5>_+pqMMsDg>|&_z>lOl0q)E^xUbvzFU{S#Hq*Gh8V^h&QV?1uj+t$|3>x})qB4@#b#hS z+f)ihW(?6jqtnFv{>sMN&gajM4$xf`)kRt^!=&ZI1715Ib{nC?%I^xu;%b>+*2>4; zmfe53VbxX(2yxN)c^zF+;>yH$n)WX9Zw4#^8zd`{ILJ`ywsc~N7R^U28&xwKr8mA| z*&cDzKSDKkBU8?XjHa8oWBj}(q3vCZp%5%%&Eq+y(bQ8!f+ACK6B$82E{2bSrG7k( zWeZck!GB=Fh|@VFeF=)}zzET+?mMgY#6rQSpJ1W~>q%g=#i8!<)<=(j@U7G9?|uAn z`+-@03GBs3kH7PN{V+c-_4)YWv!Q!d#}CG5e6;)ggNJ9&(g)??^zh_o|M!W%KY8-# d-=98w^67s*dG`Dfs{-vmdhNB}yz}Ox{{g$=H?#l% delta 98451 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 diff --git a/doc/text/developer-manual.txt b/doc/text/developer-manual.txt index cf49d41a..b6023da4 100644 --- a/doc/text/developer-manual.txt +++ b/doc/text/developer-manual.txt @@ -2,7 +2,7 @@ Privoxy Developer Manual [ Copyright 2001-2007 by Privoxy Developers ] -$Id: developer-manual.sgml,v 2.13 2007/10/30 17:59:31 fabiankeil Exp $ +$Id: developer-manual.sgml,v 2.14 2008/01/17 01:49:51 hal9 Exp $ The developer manual provides guidance on coding, testing, packaging, documentation and other issues of importance to those involved with Privoxy @@ -11,11 +11,11 @@ join the team. Note that it's currently out of date and may not be entirely correct. As always, patches are welcome. Please note that this document is constantly evolving. This copy represents the -state at the release of version 3.0.7. You can find the latest version of the +state at the release of version 3.0.8. You can find the latest version of the this manual at http://www.privoxy.org/developer-manual/. Please see the Contact section on how to contact the developers. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- Table of Contents 1. Introduction @@ -156,7 +156,7 @@ it available to as wide an audience as possible. One does not have to be a programmer to contribute. Packaging, testing, documenting and porting, are all important jobs as well. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.1. Quickstart to Privoxy Development @@ -173,7 +173,7 @@ For the time being (read, this section is under construction), you can also refer to the extensive comments in the source code. In fact, reading the code is recommended in any case. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2. The CVS Repository @@ -182,7 +182,7 @@ write access to our holy grail, the CVS repository. One of the team members will need to set this up for you. Please read this chapter completely before accessing via CVS. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1. Access to CVS @@ -192,7 +192,7 @@ for your operating system. For historical reasons, the CVS server is called ijbswa.cvs.sourceforge.net, the repository is called ijbswa, and the source tree module is called current. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.2. Branches @@ -216,7 +216,7 @@ At one time there were two distinct branches: stable and unstable. The more drastic changes were to be in the unstable branch. These branches have now been merged to minimize time and effort of maintaining two branches. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.3. CVS Commit Guidelines @@ -228,29 +228,29 @@ guidelines: Basic Guidelines, for all branches: - • Please don't commit even a small change without testing it thoroughly + * Please don't commit even a small change without testing it thoroughly first. When we're close to a public release, ask a fellow developer to review your changes. - • Your commit message should give a concise overview of what you changed (no + * Your commit message should give a concise overview of what you changed (no big details) and why you changed it Just check previous messages for good examples. - • Don't use the same message on multiple files, unless it equally applies to + * Don't use the same message on multiple files, unless it equally applies to all those files. - • If your changes span multiple files, and the code won't recompile unless + * If your changes span multiple files, and the code won't recompile unless all changes are committed (e.g. when changing the signature of a function), then commit all files one after another, without long delays in between. If necessary, prepare the commit messages in advance. - • Before changing things on CVS, make sure that your changes are in line with + * Before changing things on CVS, make sure that your changes are in line with the team's general consensus on what should be done. - • Note that near a major public release, we get more cautious. There is + * Note that near a major public release, we get more cautious. There is always the possibility to submit a patch to the patch tracker instead. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3. Documentation Guidelines @@ -305,7 +305,7 @@ needed. This is especially important just prior to a new release! Please do this after the $VERSION and other release specific data in configure.in has been updated (this is done just prior to a new release). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.1. Quickstart to Docbook and SGML @@ -351,7 +351,7 @@ Look at any of the existing docs for examples of all these and more. You might also find "Writing Documentation Using DocBook - A Crash Course" useful. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.2. Privoxy Documentation Style @@ -361,9 +361,9 @@ fashion. Here it is: - • All tags should be lower case. + * All tags should be lower case. - • Tags delimiting a block of text (even small blocks) should be on their own + * Tags delimiting a block of text (even small blocks) should be on their own line. Like: @@ -376,7 +376,7 @@ Here it is: Just to emphasize, some text goes here. - • Tags should be nested and step indented for block text like: (except + * Tags should be nested and step indented for block text like: (except in-line tags) @@ -392,23 +392,23 @@ Here it is: This makes it easier to find the text amongst the tags ;-) - • Use white space to separate logical divisions within a document, like + * Use white space to separate logical divisions within a document, like between sections. Running everything together consistently makes it harder to read and work on. - • Do not hesitate to make comments. Comments can either use the + * Do not hesitate to make comments. Comments can either use the element, or the style comment familiar from HTML. (Note in Docbook v4.x is replaced by .) - • We have an international audience. Refrain from slang, or English + * We have an international audience. Refrain from slang, or English idiosyncrasies (too many to list :). Humor also does not translate well sometimes. - • Try to keep overall line lengths in source files to 80 characters or less + * Try to keep overall line lengths in source files to 80 characters or less for obvious reasons. This is not always possible, with lengthy URLs for instance. - • Our documents are available in differing formats. Right now, they are just + * Our documents are available in differing formats. Right now, they are just plain text, HTML, and PDF, but others are always a future possibility. Be careful with URLs (), and avoid this mistake: @@ -419,10 +419,10 @@ Here it is: My favorite site is example.com. - • All documents should be spell checked occasionally. aspell can check SGML + * All documents should be spell checked occasionally. aspell can check SGML with the -H option. (ispell I think too.) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.3. Privoxy Custom Entities @@ -442,7 +442,7 @@ encouraged to use these where possible. Some of these obviously require re-setting with each release (done by the Makefile). A sampling of custom entities are listed below. See any of the main docs for examples. - • Re- "boilerplate" text entities are defined like: + * Re- "boilerplate" text entities are defined like: @@ -452,9 +452,9 @@ entities are listed below. See any of the main docs for examples. semi-colon), and the contents will be dumped into the finished doc at that point. - • Commonly used "internal entities": + * Commonly used "internal entities": - p-version: the Privoxy version string, e.g. "3.0.7". + p-version: the Privoxy version string, e.g. "3.0.8". p-status: the project status, either "alpha", "beta", or "stable". p-not-stable: use to conditionally include text in "not stable" releases (e.g. "beta"). @@ -464,7 +464,7 @@ entities are listed below. See any of the main docs for examples. There are others in various places that are defined for a specific purpose. Read the source! -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4. Coding Guidelines @@ -479,7 +479,7 @@ And that of course comes back to us as individuals. If we can increase our development and product efficiencies then we can solve more of the request for changes/improvements and in general feel good about ourselves. ;-> -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.2. Using Comments @@ -517,7 +517,7 @@ This demonstrates 2 cases of "what not to do". The first is a is actually being done. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.2.2. Use blocks for comments @@ -558,7 +558,7 @@ If you are trying to add a small logic comment and do not wish to "disrupt" the flow of the code, feel free to use a 1 line comment which is NOT on the same line as the code. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.2.3. Keep Comments on their own line @@ -609,7 +609,7 @@ short do_something_very_important( } /* -END- do_something_very_important */ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.2.4. Comment each logical step @@ -624,7 +624,7 @@ into it to see where you forgot to put one. Most "for", "while", "do", etc... loops _probably_ need a comment. After all, these are usually major logic containers. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.2.5. Comment All Functions Thoroughly @@ -641,7 +641,7 @@ function for the problem at hand. As a result of such benefits, all functions should contain the information presented in the addendum section of this document. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.2.6. Comment at the end of braces if the content is more than one screen length @@ -675,7 +675,7 @@ if ( 1 == X ) } /* -END- if ( 1 == X ) */ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.3. Naming Conventions @@ -699,7 +699,7 @@ Instead of: int msiis5hack = 0; int msIis5Hack = 0; -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.3.2. Function Names @@ -722,7 +722,7 @@ int loadsomefile( struct client_state *csp ) int loadSomeFile( struct client_state *csp ) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.3.3. Header file prototypes @@ -744,7 +744,7 @@ Instead of: (.c) int load_aclfile( struct client_state *csp ) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.3.4. Enumerations, and #defines @@ -773,7 +773,7 @@ Example: #endif /* def FEATURE_FORCE */ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.3.5. Constants @@ -801,7 +801,7 @@ Instead of: #define UseImageList 1 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4. Using Space @@ -848,7 +848,7 @@ while ( more lines are read ) } -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4.2. ALL control statements should have a block @@ -879,7 +879,7 @@ that which the developer desired (per indentation). Using code braces would have prevented this "feature". The "explanation" and "exception" from the point above also applies. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4.3. Do not belabor/blow-up boolean expressions @@ -896,7 +896,7 @@ Note: The former is readable and concise. The later is wordy and inefficient. Please assume that any developer new to the project has at least a "good" knowledge of C/C++. (Hope I do not offend by that last comment ... 8-) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4.4. Use white space freely because it is free @@ -917,7 +917,7 @@ if ( this_variable == this_variable ) first_value = old_value + ( ( some_value - another_value ) - whatever ) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4.5. Don't use white space around structure operators @@ -939,7 +939,7 @@ function_name(); Instead of: a_struct -> a_member; a_struct . a_member; function_name (); -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4.6. Make the last brace of a function stand out @@ -972,7 +972,7 @@ long if {} statements too. After all whitespace is free! Status: developer-discretion on the number of blank lines. Enforced is the end of function comments. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4.7. Use 3 character indentions @@ -1007,7 +1007,7 @@ int function1( ... ) } -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.5. Initializing @@ -1033,7 +1033,7 @@ SIGSEV vs. array_ptr[0]. Status: developer-discretion if and only if the variable is assigned a value "shortly after" declaration. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6. Functions @@ -1051,7 +1051,7 @@ contains_an_image(); is_web_page_blank(); -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.2. Always specify a return type for a function. @@ -1061,7 +1061,7 @@ The default return for a function is an int. To avoid ambiguity, create a return for a function when the return has a purpose, and create a void return type if the function does not need to return anything. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.3. Minimize function calls when iterating by using variables @@ -1103,7 +1103,7 @@ Exceptions: if the value of block_list_length() *may* change or could *potentially* change, then you must code the function call in the for/while loop. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.4. Pass and Return by Const Reference @@ -1120,7 +1120,7 @@ char *argv[] ) { strcmp( argv[0], "privoxy" ); } Both these pointers are *const*! If the c runtime library maintainers do it, we should too. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.5. Pass and Return by Value @@ -1133,7 +1133,7 @@ client_state csp ) would not work. So, to be consistent, we should declare all prototypes with "pass by value": int load_aclfile( struct client_state *csp ) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.6. Names of include files @@ -1160,7 +1160,7 @@ Exception: Note: Please! do not add "-I." to the Makefile without a _very_ good reason. This duplicates the #include "file.h" behavior. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.7. Provide multiple inclusion protection @@ -1180,7 +1180,7 @@ Example: #endif /* ndef PROJECT_H_INCLUDED */ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.8. Use `extern "C"` when appropriate @@ -1204,7 +1204,7 @@ extern "C" #endif /* def __cplusplus */ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6.9. Where Possible, Use Forward Struct Declaration Instead of Includes @@ -1228,7 +1228,7 @@ however, the header file is unnecessary. Status: Use with discretion. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7. General Coding Practices @@ -1240,7 +1240,7 @@ Compiler warnings are meant to help you find bugs. You should turn on as many as possible. With GCC, the switch is "-Wall". Try and fix as many warnings as possible. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.2. Provide a default case for all switch statements @@ -1281,7 +1281,7 @@ stream (as in load_config). Or it may really be an abort condition. Status: Programmer discretion is advised. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.3. Try to avoid falling through cases in a switch statement. @@ -1300,7 +1300,7 @@ use a break statement for each case statement. If you choose to allow fall through, you should comment both the fact of the fall through and reason why you felt it was necessary. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.4. Use 'long' or 'short' Instead of 'int' @@ -1314,7 +1314,7 @@ GNU-Emacs), there are typedefs to int4, int8, int16, (or equivalence ... I forget the exact typedefs now). Should we add these to IJB now that we have a "configure" script? -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.5. Don't mix size_t and other types @@ -1325,7 +1325,7 @@ whether it is signed or unsigned, or about how long it is. Do not compare a size_t against another variable of a different type (or even against a constant) without casting one of the values. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.6. Declare each variable and struct on its own line. @@ -1355,7 +1355,7 @@ a good comment on their functions. Status: developer-discretion. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.7. Use malloc/zalloc sparingly @@ -1373,7 +1373,7 @@ If a function creates a struct and stores a pointer to it in a list, then it should definitely be allocated via `malloc'. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.8. The Programmer Who Uses 'malloc' is Responsible for Ensuring 'free' @@ -1400,7 +1400,7 @@ library functions ... such as `strdup'. Status: developer-discretion. The "main" use of this standard is for allocating and freeing data structures (complex or nested). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.9. Add loaders to the `file_list' structure and in order @@ -1413,7 +1413,7 @@ Note: It may appear that the alpha order is broken in places by POPUP tests coming before PCRS tests. But since POPUPs can also be referred to as KILLPOPUPs, it is clear that it should come first. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7.10. "Uncertain" new code and/or changes to existing code, use FIXME or XXX @@ -1438,13 +1438,13 @@ Note: If you make it clear that this may or may not be a "good thing (tm)", it will be easier to identify and include in the project (or conversely exclude from the project). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.8. Addendum: Template for files and function comment blocks: Example for file comments: -const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.13 2007/10/30 17:59:31 fabiankeil Exp $"; +const char FILENAME_rcs[] = "$Id: developer-manual.sgml,v 2.14 2008/01/17 01:49:51 hal9 Exp $"; /********************************************************************* * * File : $Source$ @@ -1503,7 +1503,7 @@ Example for file header comments: #ifndef _FILENAME_H #define _FILENAME_H -#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.13 2007/10/30 17:59:31 fabiankeil Exp $" +#define FILENAME_H_VERSION "$Id: developer-manual.sgml,v 2.14 2008/01/17 01:49:51 hal9 Exp $" /********************************************************************* * * File : $Source$ @@ -1595,13 +1595,13 @@ int FUNCTION_NAME( void *param1, const char *x ) Note: If we all follow this practice, we should be able to parse our code to create a "self-documenting" web page. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5. Testing Guidelines To be filled. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.1. Testplan for releases @@ -1611,15 +1611,15 @@ Explain release numbers. major, minor. developer releases. etc. 2. Remove any file that was left over. This includes (but is not limited to) - □ /var/log/privoxy + + /var/log/privoxy - □ /etc/privoxy + + /etc/privoxy - □ /usr/sbin/privoxy + + /usr/sbin/privoxy - □ /etc/init.d/privoxy + + /etc/init.d/privoxy - □ /usr/doc/privoxy* + + /usr/doc/privoxy* 3. Install the rpm. Any error messages? @@ -1630,23 +1630,23 @@ Explain release numbers. major, minor. developer releases. etc. 6. Remove the rpm. Any error messages? All files removed? -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.2. Test reports Please submit test reports only with the test form at sourceforge. Three simple steps: - • Select category: the distribution you test on. + * Select category: the distribution you test on. - • Select group: the version of Privoxy that we are about to release. + * Select group: the version of Privoxy that we are about to release. - • Fill the Summary and Detailed Description with something intelligent (keep + * Fill the Summary and Detailed Description with something intelligent (keep it short and precise). Do not mail to the mailing list (we cannot keep track on issues there). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6. Releasing a New Version @@ -1661,7 +1661,7 @@ outlined in this chapter. The following programs are required to follow this process: ncftpput (ncftp), scp, ssh (ssh), gmake (GNU's version of make), autoconf, cvs. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.1. Version numbers @@ -1669,12 +1669,12 @@ First you need to determine which version number the release will have. Privoxy version numbers consist of three numbers, separated by dots, like in X.Y.Z (e.g. 3.0.0), where: - • X, the version major, is rarely ever changed. It is increased by one if + * X, the version major, is rarely ever changed. It is increased by one if turning a development branch into stable substantially changes the functionality, user interface or configuration syntax. Majors 1 and 2 were Junkbuster, and 3 will be the first stable Privoxy release. - • Y, the version minor, represents the branch within the major version. At + * Y, the version minor, represents the branch within the major version. At any point in time, there are two branches being maintained: The stable branch, with an even minor, say, 2N, in which no functionality is being added and only bug-fixes are made, and 2N+1, the development branch, in @@ -1686,7 +1686,7 @@ version numbers consist of three numbers, separated by dots, like in X.Y.Z up (i.e. no longer maintained), the former development branch 2N+1 becomes the new stable branch 2N+2, and a new development branch 2N+3 is opened. - • Z, the point or sub version, represents a release of the software within a + * Z, the point or sub version, represents a release of the software within a branch. It is therefore incremented immediately before each code freeze. In development branches, only the even point versions correspond to actual releases, while the odd ones denote the evolving state of the sources on @@ -1724,22 +1724,22 @@ working on both, then this would require at least two separate check outs (i.e main trunk, and the stable release branch, which is v_3_0_branch at the moment). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.2. Before the Release: Freeze The following must be done by one of the developers prior to each new release. - • Make sure that everybody who has worked on the code in the last couple of + * Make sure that everybody who has worked on the code in the last couple of days has had a chance to yell "no!" in case they have pending changes/fixes in their pipelines. Announce the freeze so that nobody will interfere with last minute changes. - • Increment the version number (point from odd to even in development + * Increment the version number (point from odd to even in development branches!) in configure.in. (RPM spec files will need to be incremented as well.) - • If default.action has changed since last release (i.e. software release or + * If default.action has changed since last release (i.e. software release or standalone actions file release), bump up its version info to A.B in this line: @@ -1749,7 +1749,7 @@ The following must be done by one of the developers prior to each new release. Then change the version info in doc/webserver/actions/index.php, line: '$required_actions_file_version = "A.B";' - • All documentation should be rebuild after the version bump. Finished docs + * All documentation should be rebuild after the version bump. Finished docs should be then be committed to CVS (for those without the ability to build these). Some docs may require rather obscure processing tools. config, the man page (and the html version of the man page), and the PDF docs fall in @@ -1758,7 +1758,7 @@ The following must be done by one of the developers prior to each new release. the webserver. See the Section "Updating the webserver" in this manual for details. - • The User Manual is also used for context sensitive help for the CGI editor. + * The User Manual is also used for context sensitive help for the CGI editor. This is version sensitive, so that the user will get appropriate help for his/her release. So with each release a fresh version should be uploaded to the webserver (this is in addition to the main User Manual link from the @@ -1767,24 +1767,24 @@ The following must be done by one of the developers prior to each new release. user-manual/. This will need to be updated for each new release. There is no Makefile target for this at this time!!! It needs to be done manually. - • All developers should look at the ChangeLog and make sure noteworthy + * All developers should look at the ChangeLog and make sure noteworthy changes are referenced. - • Commit all files that were changed in the above steps! + * Commit all files that were changed in the above steps! - • Tag all files in CVS with the version number with "cvs tag v_X_Y_Z". Don't + * Tag all files in CVS with the version number with "cvs tag v_X_Y_Z". Don't use vX_Y_Z, ver_X_Y_Z, v_X.Y.Z (won't work) etc. - • If the release was in a development branch, increase the point version from + * If the release was in a development branch, increase the point version from even to odd (X.Y.(Z+1)) again in configure.in and commit your change. - • On the webserver, copy the user manual to a new top-level directory called + * On the webserver, copy the user manual to a new top-level directory called X.Y.Z. This ensures that help links from the CGI pages, which have the version as a prefix, will go into the right version of the manual. If this is a development branch release, also symlink X.Y.(Z-1) to X.Y.Z and X.Y. (Z+1) to . (i.e. dot). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3. Building and Releasing the Packages @@ -1805,32 +1805,32 @@ Do NOT change a single bit, including, but not limited to version information after export from CVS. This is to make sure that all release packages, and with them, all future bug reports, are based on exactly the same code. -┌─────────────────────────────────────────────────────────────────────────────┐ -│ Warning │ -├─────────────────────────────────────────────────────────────────────────────┤ -│Every significant release of Privoxy has included at least one package that │ -│either had incorrect versions of files, missing files, or incidental │ -│leftovers from a previous build process that gave unknown numbers of users │ -│headaches to try to figure out what was wrong. PLEASE, make sure you are │ -│using pristene sources, and are following the prescribed process! │ -└─────────────────────────────────────────────────────────────────────────────┘ ++-----------------------------------------------------------------------------+ +| Warning | +|-----------------------------------------------------------------------------| +|Every significant release of Privoxy has included at least one package that | +|either had incorrect versions of files, missing files, or incidental | +|leftovers from a previous build process that gave unknown numbers of users | +|headaches to try to figure out what was wrong. PLEASE, make sure you are | +|using pristene sources, and are following the prescribed process! | ++-----------------------------------------------------------------------------+ Please find additional instructions for the source tarball and the individual platform dependent binary packages below. And details on the Sourceforge release process below that. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.1. Note on Privoxy Packaging Please keep these general guidelines in mind when putting together your package. These apply to all platforms! - • Privoxy requires write access to: all *.action files, all logfiles, and the + * Privoxy requires write access to: all *.action files, all logfiles, and the trust file. You will need to determine the best way to do this for your platform. - • Please include up to date documentation. At a bare minimum: + * Please include up to date documentation. At a bare minimum: LICENSE (top-level directory) @@ -1861,28 +1861,28 @@ package. These apply to all platforms! directory with privoxy-index.html, (i.e. one level up from the manual directories). - • user.action and user.filter are designed for local preferences. Make sure + * user.action and user.filter are designed for local preferences. Make sure these do not get overwritten! config should not be overwritten either. This has especially important configuration data in it. trust should be left in tact as well. - • Other configuration files (default.action, default.filter and + * Other configuration files (default.action, default.filter and standard.action) should be installed as the new defaults, but all previously installed configuration files should be preserved as backups. This is just good manners :-) These files are likely to change between releases and contain important new features and bug fixes. - • Please check platform specific notes in this doc, if you haven't done + * Please check platform specific notes in this doc, if you haven't done "Privoxy" packaging before for other platform specific issues. Conversely, please add any notes that you know are important for your platform (or contact one of the doc maintainers to do this if you can't). - • Packagers should do a "clean" install of their package after building it. + * Packagers should do a "clean" install of their package after building it. So any previous installs should be removed first to ensure the integrity of the newly built package. Then run the package for a while to make sure there are no obvious problems, before uploading. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.2. Source Tarball @@ -1906,7 +1906,7 @@ To upload the package to Sourceforge, simply issue Go to the displayed URL and release the file publicly on Sourceforge. For the change log field, use the relevant section of the ChangeLog file. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.3. SuSE, Conectiva or Red Hat RPM @@ -1944,7 +1944,7 @@ where rpm_packagerev is the RPM release number as determined above. Go to the displayed URL and release the file publicly on Sourceforge. Use the release notes and change log from the source tarball package. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.4. OS/2 @@ -1983,7 +1983,7 @@ Upload this anonymously to uploads.sourceforge.net/incoming, create a release for it, and you're done. Use the release notes and Change Log from the source tarball package. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.5. Solaris @@ -2010,7 +2010,7 @@ on the Sourceforge machine (no ncftpput). You now have to manually upload the archive to Sourceforge's ftp server and release the file publicly. Use the release notes and Change Log from the source tarball package. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.6. Windows @@ -2035,7 +2035,7 @@ Now you can manually rename privoxy_setup.exe to privoxy_setup_X_Y_Z.exe, and upload it to SourceForge. When releasing the package on SourceForge, use the release notes and Change Log from the source tarball package. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.7. Debian @@ -2043,7 +2043,7 @@ First, make sure that you have freshly exported the right version into an empty directory. (See "Building and releasing packages" above). Then add a log entry to debian/changelog, if it is not already there, for example by running: - debchange -v 3.0.7-beta-1 "New upstream version" + debchange -v 3.0.8-stable-1 "New upstream version" Then, run: @@ -2051,13 +2051,13 @@ Then, run: dpkg-buildpackage -rfakeroot -us -uc -b -This will create ../privoxy_3.0.7-beta-1_i386.deb which can be uploaded. To +This will create ../privoxy_3.0.8-stable-1_i386.deb which can be uploaded. To upload the package to Sourceforge, simply issue make debian-upload -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.8. Mac OSX @@ -2090,7 +2090,7 @@ You can then upload privoxyosx_setup_x.y.z.zip anonymously to uploads.sourceforge.net/incoming, create a release for it, and you're done. Use the release notes and Change Log from the source tarball package. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.9. FreeBSD @@ -2117,7 +2117,7 @@ on the Sourceforge machine (no ncftpput). You now have to manually upload the archive to Sourceforge's ftp server and release the file publicly. Use the release notes and Change Log from the source tarball package. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.10. HP-UX 11 @@ -2130,7 +2130,7 @@ directory. (See "Building and releasing packages" above). Then run: Then do FIXME. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.11. Amiga OS @@ -2143,7 +2143,7 @@ directory. (See "Building and releasing packages" above). Then run: Then do FIXME. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3.12. AIX @@ -2170,18 +2170,18 @@ the Sourceforge machine (no ncftpput). You now have to manually upload the archive to Sourceforge's ftp server and release the file publicly. Use the release notes and Change Log from the source tarball package. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.4. Uploading and Releasing Your Package After the package is ready, it is time to upload it to SourceForge, and go through the release steps. The upload is done via FTP: - • Upload to: ftp://upload.sourceforge.net/incoming + * Upload to: ftp://upload.sourceforge.net/incoming - • user: anonymous + * user: anonymous - • password: ijbswa-developers@lists.sourceforge.net + * password: ijbswa-developers@lists.sourceforge.net Or use the make targets as described above. @@ -2189,7 +2189,7 @@ Once this done go to http://sourceforge.net/project/admin/editpackages.php? group_id=11118, making sure you are logged in. Find your target platform in the second column, and click Add Release. You will then need to create a new release for your package, using the format of $VERSION ($CODE_STATUS), e.g. -3.0.7 (beta). +3.0.8 (beta). Now just follow the prompts. Be sure to add any appropriate Release notes. You should see your freshly uploaded packages in "Step 2. Add Files To This @@ -2203,7 +2203,7 @@ This should do it! If you have made errors, or need to make changes, you can go through essentially the same steps, but select Edit Release, instead of Add Release. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.5. After the Release @@ -2214,7 +2214,7 @@ Changelog. Also, post an updated News item on the project page Sourceforge, and update the Home page and docs linked from the Home page (see below). Other news sites and release oriented sites, such as Freshmeat, should also be notified. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7. Update the Webserver @@ -2254,7 +2254,7 @@ avoid permission problems. Also, please do not upload docs from development branches or versions. The publicly posted docs should be in sync with the last official release. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8. Contacting the developers, Bug Reporting and Feature Requests @@ -2262,7 +2262,7 @@ We value your feedback. In fact, we rely on it to improve Privoxy and its configuration. However, please note the following hints, so we can provide you with the best support: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.1. Get Support @@ -2282,19 +2282,19 @@ with a proper subject. Additionally you should make it clear that you want to get CC'd. Otherwise some responses will be directed to the mailing list only, and you won't see them. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.2. Reporting Problems "Problems" for our purposes, come in two forms: - • Configuration issues, such as ads that slip through, or sites that don't + * Configuration issues, such as ads that slip through, or sites that don't function properly due to one Privoxy "action" or another being turned "on". - • "Bugs" in the programming code that makes up Privoxy, such as that might + * "Bugs" in the programming code that makes up Privoxy, such as that might cause a crash. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.2.1. Reporting Ads or Other Configuration Problems @@ -2307,7 +2307,7 @@ New, improved default.action files may occasionally be made available based on your feedback. These will be announced on the ijbswa-announce list and available from our the files section of our project page. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.2.2. Reporting Bugs @@ -2335,30 +2335,30 @@ your bug still exists. Please be sure to provide the following information: - • The exact Privoxy version you are using (if you got the source from CVS, + * The exact Privoxy version you are using (if you got the source from CVS, please also provide the source code revisions as shown in http:// config.privoxy.org/show-version). - • The operating system and versions you run Privoxy on, (e.g. Windows XP + * The operating system and versions you run Privoxy on, (e.g. Windows XP SP2), if you are using a Unix flavor, sending the output of "uname -a" should do, in case of GNU/Linux, please also name the distribution. - • The name, platform, and version of the browser you were using (e.g. + * The name, platform, and version of the browser you were using (e.g. Internet Explorer v5.5 for Mac). - • The URL where the problem occurred, or some way for us to duplicate the + * The URL where the problem occurred, or some way for us to duplicate the problem (e.g. http://somesite.example.com/?somethingelse=123). - • Whether your version of Privoxy is one supplied by the Privoxy developers + * Whether your version of Privoxy is one supplied by the Privoxy developers via SourceForge, or if you got your copy somewhere else. - • Whether you are using Privoxy in tandem with another proxy such as Tor. If + * Whether you are using Privoxy in tandem with another proxy such as Tor. If so, please temporary disable the other proxy to see if the symptoms change. - • Whether you are using a personal firewall product. If so, does Privoxy work + * Whether you are using a personal firewall product. If so, does Privoxy work without it? - • Any other pertinent information to help identify the problem such as config + * Any other pertinent information to help identify the problem such as config or log file excerpts (yes, you should have log file entries for each action taken). @@ -2374,7 +2374,7 @@ automatically get a mail when someone responds to your request. The appendix of the Privoxy User Manual also has helpful information on understanding actions, and action debugging. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.3. Request New Features @@ -2382,7 +2382,7 @@ You are welcome to submit ideas on new features or other proposals for improvement through our feature request tracker at http://sourceforge.net/ tracker/?atid=361118&group_id=11118. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.4. Other @@ -2392,7 +2392,7 @@ welcome on the developers list! You can find an overview of all Privoxy-related mailing lists, including list archives, at: http://sourceforge.net/mail/? group_id=11118. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 9. Privoxy Copyright, License and History @@ -2402,7 +2402,7 @@ ijbswa-developers@lists.sourceforge.net> Some source code is based on code Copyright 1997 by Anonymous Coders and Junkbusters, Inc. and licensed under the GNU General Public License. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 9.1. License @@ -2424,7 +2424,7 @@ this program; if not, write to the Boston, MA 02110-1301 USA -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 9.2. History @@ -2454,7 +2454,7 @@ along the way. The result of this is Privoxy, whose first stable version, 3.0, was released August, 2002. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 10. See also diff --git a/doc/text/faq.txt b/doc/text/faq.txt index 44f398a9..6eedb217 100644 --- a/doc/text/faq.txt +++ b/doc/text/faq.txt @@ -2,7 +2,7 @@ Privoxy Frequently Asked Questions [ Copyright 2001-2007 by Privoxy Developers ] -$Id: faq.sgml,v 2.35 2007/11/19 17:57:59 fabiankeil Exp $ +$Id: faq.sgml,v 2.36 2008/01/17 01:49:51 hal9 Exp $ This FAQ gives quick answers to frequently asked questions about Privoxy. It is not a substitute for the Privoxy User Manual. @@ -19,11 +19,11 @@ multi-user networks. Privoxy is based on Internet Junkbuster (tm). Please note that this document is a work in progress. This copy represents the -state at the release of version 3.0.7. You can find the latest version of the +state at the release of version 3.0.8. You can find the latest version of the document at http://www.privoxy.org/faq/. Please see the Contact section if you want to contact the developers. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- Table of Contents 1. General Information @@ -198,7 +198,7 @@ Table of Contents Anyone who is interested in security, privacy, or in finer-grained control over their web and Internet experience. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.2. Is Privoxy the best choice for me? @@ -221,7 +221,7 @@ files. Also note that the web-based action editor doesn't use authentication and should only be enabled in environments where all clients with access to Privoxy listening port can be trusted. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.3. What is a "proxy"? How does Privoxy work? @@ -245,14 +245,14 @@ under your complete control via the various configuration files and options. Being a proxy also makes it easier to share configurations among multiple browsers and/or users. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.4. Does Privoxy do anything more than ad blocking? Yes, ad blocking is but one possible use. There are many, many ways Privoxy can be used to sanitize and customize web browsing. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.5. What is this new version of "Junkbuster"? @@ -282,7 +282,7 @@ along the way. The result of this is Privoxy, whose first stable version, 3.0, was released August, 2002. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.6. Why "Privoxy"? Why change the name from Junkbuster at all? @@ -303,7 +303,7 @@ Privoxy is the "Privacy Enhancing Proxy". Also, its content modification and junk suppression gives you, the user, more control, more freedom, and allows you to browse your personal and "private edition" of the web. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.7. How does Privoxy differ from the old Junkbuster? @@ -314,44 +314,50 @@ many new ones have been added, all in the same vein. Privoxy's new features include: - • Integrated browser based configuration and control utility at http:// + * Can be run as an "intercepting" proxy, which obviates the need to configure + browsers individually. + + * Sophisticated actions and filters for manipulating both server and client + headers. + + * Can be chained with other proxies. + + * Integrated browser based configuration and control utility at http:// config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule and filter effects. Remote toggling. - • Web page filtering (text replacements, removes banners based on size, - invisible "web-bugs", JavaScript and HTML annoyances, pop-up windows, - header manipulation, etc.) + * Web page filtering (text replacements, removes banners based on size, + invisible "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.) - • Modularized configuration that allows for standard settings and user + * Modularized configuration that allows for standard settings and user settings to reside in separate files, so that installing updated actions files won't overwrite individual user settings. - • Support for Perl Compatible Regular Expressions in the configuration files, - and generally a more sophisticated and flexible configuration syntax over - previous versions. + * Support for Perl Compatible Regular Expressions in the configuration files, + and a more sophisticated and flexible configuration syntax. - • Improved cookie management features (e.g. session based cookies). + * Improved cookie management features (e.g. session based cookies). - • GIF de-animation. + * GIF de-animation. - • Bypass many click-tracking scripts (avoids script redirection). + * Bypass many click-tracking scripts (avoids script redirection). - • Multi-threaded (POSIX and native threads). + * Multi-threaded (POSIX and native threads). - • User-customizable HTML templates for all proxy-generated pages (e.g. + * User-customizable HTML templates for all proxy-generated pages (e.g. "blocked" page). - • Auto-detection and re-reading of config file changes. + * Auto-detection and re-reading of config file changes. - • Improved signal handling, and a true daemon mode (Unix). + * Improved signal handling, and a true daemon mode (Unix). - • Every feature now controllable on a per-site or per-location basis, + * Every feature now controllable on a per-site or per-location basis, configuration more powerful and versatile over-all. - • Many smaller new features added, limitations and bugs removed, and security + * Many smaller new features added, limitations and bugs removed, and security holes fixed. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.8. How does Privoxy know what is an ad, and what is not? @@ -374,7 +380,7 @@ the first place. Both of this involves a certain amount of guesswork and is, of course, freely and readily configurable. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.9. Can Privoxy make mistakes? This does not sound very scientific. @@ -388,7 +394,7 @@ flexible, and includes tools to help identify these types of situations so they can be addressed as needed, allowing you to customize your installation. (See the Troubleshooting section below.) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.10. Will I have to configure Privoxy before I can use it? @@ -405,7 +411,7 @@ certainly benefit by customizing Privoxy's configuration to more closely match your individual situation. And we encourage you to do this. This is where the real power of Privoxy lies! -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.11. Can Privoxy run as a server on a network? @@ -413,7 +419,7 @@ Yes, Privoxy runs as a server already, and can easily be configured to "serve" more than one client. See How can I set up Privoxy to act as a proxy for my LAN below. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.12. My browser does the same things as Privoxy. Why should I use Privoxy at all? @@ -432,7 +438,7 @@ Privoxy's privacy enhancing features at the same time. While your browser probably lacks some features Privoxy offers, it should also be able to do some things more reliable, for example restricting and suppressing JavaScript. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.13. Why should I trust Privoxy? @@ -444,7 +450,7 @@ people can, and do read it. You can build the software from scratch, if you want, so that you know the executable is clean, and that it is yours. In fact, we encourage this level of scrutiny. It is one reason we use Privoxy ourselves. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.14. Is there is a license or fee? What about a warranty? Registration? @@ -457,7 +463,7 @@ included. There is no warranty of any kind, expressed, implied or otherwise. That is something that would cost real money ;-) There is no registration either. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.15. Can Privoxy remove spyware? Adware? Viruses? @@ -471,7 +477,7 @@ contamination from such sites. However, keeping such a configuration up to date would require a lot of time and effort that would be better spend on keeping your software itself up to date so it doesn't have known vulnerabilities. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.16. Can I use Privoxy with other ad-blocking software? @@ -484,7 +490,7 @@ its configuration to your liking. Note that this is an advice specific to ad blocking. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.17. I would like to help you, what can I do? @@ -506,7 +512,7 @@ You can also start helping out without SourceForge.net account, simply by showing up on the mailing list, helping out other users, providing general feedback or reporting problems you noticed. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.17.2. Contribute! @@ -515,7 +521,7 @@ buying software to test Privoxy with, and, of course, for regular world-wide get-togethers (hahaha). If you enjoy the software and feel like helping us with a donation, just drop us a note and get your name on the list of contributors. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.17.3. Software @@ -525,7 +531,7 @@ product, you might consider supplying us with a copy or license. We can't, however, guarantee that we will fix all potential compatibility issues as a result. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2. Installation @@ -537,7 +543,7 @@ others. Direct browser support is not an absolute requirement since Privoxy runs as a separate application and talks to the browser in the standardized HTTP protocol, just like a web server does. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.2. Which operating systems are supported? @@ -554,7 +560,7 @@ systems. Source code is freely available, so porting to other operating systems is always a possibility. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.3. Can I use Privoxy with my email client? @@ -569,7 +575,7 @@ related issues, that can require advanced skills to overcome. The developers recommend using email clients that can be configured to convert HTML to plain text for these reasons. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.4. I just installed Privoxy. Is there anything special I have to do now? @@ -581,7 +587,7 @@ but where possible, configuring the client is recommended. See the User Manual for more details. You should also flush your browser's memory and disk cache to get rid of any cached junk items, and remove any stored cookies. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.5. What is the proxy address of Privoxy? @@ -605,7 +611,7 @@ above. Note that Privoxy doesn't listen on any LAN interfaces by default. Privoxy does not currently handle any other protocols such as FTP, SMTP, IM, IRC, ICQ, etc. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.6. I just installed Privoxy, and nothing is happening. All the ads are there. What's wrong? @@ -623,7 +629,7 @@ or that Privoxy is not running at all. Check the log file. For instructions on starting Privoxy and browser configuration, see the chapter on starting Privoxy in the User Manual. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.7. I get a "Privoxy is not being used" dummy page although Privoxy is running and being used. @@ -644,7 +650,7 @@ example, Mozilla/Netscape users would click Edit --> Preferences --> Advanced some Firefox versions it's Tools --> Options --> Privacy --> Cache and then click "Clear Cache Now". -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3. Configuration @@ -666,7 +672,7 @@ cookies as one of your default actions, but need to accept cookies from a given site, you would need to define an exception for this site in one of your actions files, preferably in user.action. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.2. The "actions" concept confuses me. Please list some of these "actions". @@ -674,7 +680,7 @@ For a comprehensive discussion of the actions concept, please refer to the actions file chapter in the User Manual. It includes a list of all actions and an actions file tutorial to get you started. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.3. How are actions files configured? What is the easiest way to do this? @@ -685,7 +691,7 @@ then select "View & change the current configuration" from the menu. Note that this feature must be explicitly enabled in the main config file (see enable-edit-actions). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.4. There are several different "actions" files. What are the differences? @@ -701,7 +707,7 @@ Earlier versions included three different versions of the default.action file. The new scheme allows for greater flexibility of local configuration, and for browser based selection of pre-defined "aggressiveness" levels. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.5. Where can I get updated Actions Files? @@ -713,7 +719,7 @@ If you wish to receive an email notification whenever we release updates of Privoxy or the actions file, subscribe to our announce mailing list, ijbswa-announce@lists.sourceforge.net. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.6. Can I use my old config files? @@ -723,7 +729,7 @@ each release contains updated, "improved" versions and it is therefore strongly recommended to install the newer configuration files and merge back your modifications. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.7. Why is the configuration so complicated? @@ -734,7 +740,7 @@ often lacks sophistication and flexibility. There is always that trade-off there between power vs. easy-of-use. Furthermore, anyone is welcome to contribute ideas and implementations to enhance Privoxy. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.8. How can I make my Yahoo/Hotmail/Gmail account work? @@ -770,7 +776,7 @@ tell you where you are specifically and you should use that information for your configuration settings. Note that above it is not referenced as gmail.com, which is a valid domain name. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.9. What's the difference between the "Cautious", "Medium" and "Advanced" defaults? @@ -790,7 +796,7 @@ It should be noted that the "Advanced" profile (formerly known as the "Adventuresome" profile) is more aggressive, and will make use of some of Privoxy's advanced features. Use at your own risk! -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.10. Why can I change the configuration with a browser? Does that not raise security issues? @@ -811,7 +817,7 @@ file. As of Privoxy 3.0.7 these options are disabled by default. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.11. What is the default.filter file? What is a "filter"? @@ -847,7 +853,7 @@ enable-edit-actions). If you intend to develop your own filters, you might want to have a look at Privoxy-Filter-Test. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.12. How can I set up Privoxy to act as a proxy for my LAN? @@ -879,7 +885,7 @@ system. If you run Privoxy on a LAN with untrusted users, we recommend that you double-check the access control and security options! -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.13. Instead of ads, now I get a checkerboard pattern. I don't want to see anything. @@ -894,7 +900,7 @@ If you want to see nothing, then change the set-image-blocker action to "blank". This can be done by editing the user.action file, or through the web-based actions file editor. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.14. Why would anybody want to see a checkerboard pattern? @@ -906,7 +912,7 @@ some navigation aid or otherwise innocent image was erroneously blocked. It is recommended for new users so they can "see" what is happening. Some people might also enjoy seeing how many banners they don't have to see. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.15. I see some images being replaced with text instead of the checkerboard image. Why and how do I get rid of this? @@ -929,7 +935,7 @@ page. After changing the rule and un-blocking the HTML documents, the browser will try to load the actual banner images and the usual image blocking will (hopefully!) kick in. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.16. Can Privoxy run as a service on Win2K/NT/XP? @@ -940,7 +946,7 @@ Earlier 3.x versions could run as a system service using srvany.exe. See the discussion at http://sourceforge.net/tracker/?func=detail&atid=361118&aid= 485617&group_id=11118, for details, and a sample configuration. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.17. How can I make Privoxy work with other proxies like Squid or Tor? @@ -949,7 +955,7 @@ those of a another proxy. See the forwarding chapter in the User Manual which describes how to do this, and the How do I use Privoxy together with Tor section below. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.18. Can I just set Privoxy to use port 80 and thus avoid individual browser configuration? @@ -957,7 +963,7 @@ configuration? No, its more complicated than that. This only works with special kinds of proxies known as "intercepting" proxies (see below). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.19. Can Privoxy run as a "transparent" proxy? @@ -968,7 +974,7 @@ RFC 2616. However, some people say "transparent proxy" when they mean "intercepting proxy". If you are one of them, please read the next entry. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.20. Can Privoxy run as a "intercepting" proxy? @@ -983,7 +989,7 @@ Please refer to your packet filter's documentation to learn how to intercept and redirect traffic into Privoxy. Afterward you just have to configure Privoxy to accept intercepted requests. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.21. How can I configure Privoxy for use with Outlook Express? @@ -992,7 +998,7 @@ fetch any HTTP requests that may be embedded in an HTML email. So however you have Privoxy configured to work with IE, this configuration should automatically be shared. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.22. How can I have separate rules just for HTML mail? @@ -1007,7 +1013,7 @@ For a good discussion of some of the issues involved (including privacy and security issues), see http://sourceforge.net/tracker/?func=detail&atid=211118& aid=629518&group_id=11118. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.23. I sometimes notice cookies sneaking through. How? @@ -1024,7 +1030,7 @@ Privoxy's reach. All in all, Privoxy can help manage cookies in general, can help minimize the loss of privacy posed by cookies, but can't realistically stop all cookies. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.24. Are all cookies bad? Why? @@ -1040,7 +1046,7 @@ really need to be there. See the Wikipedia cookie definition for more. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.25. How can I allow permanent cookies for my trusted sites? @@ -1061,7 +1067,7 @@ anyway, so this might be redundant, but there is no harm being explicit in what you want to happen. user.action includes an alias for this situation, called allow-all-cookies. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.26. Can I have separate configurations for different users? @@ -1074,7 +1080,7 @@ Think of it as per-port configuration. Simple enough for a few users, but for large installations, consider having groups of users that might share like configurations. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.27. Can I set-up Privoxy as a whitelist of "good" sites? @@ -1107,7 +1113,7 @@ various other configuration options that should be disabled (described elsewhere here and in the User Manual) so that users can't modify their own configuration and easily circumvent the whitelist. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.28. How can I turn off ad-blocking? @@ -1145,7 +1151,7 @@ Or even a more comprehensive reversing of various ad related actions: This last "action" in this compound statement, allow-popups, is an alias that disables various pop-up blocking features. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.29. How can I have custom template pages, like the BLOCKED page? @@ -1159,7 +1165,7 @@ during upgrades. You can, however, create completely new templates, place them in another directory and specify the alternate path in the main config. For details, have a look at the templdir option. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.30. How can I remove the "Go There Anyway" link from the BLOCKED page? @@ -1180,7 +1186,7 @@ configuration via any connected user's web browser. Finally, all of these features can also be toggled on/off via options in Privoxy's main config file which means you don't have to recompile anything. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4. Miscellaneous @@ -1209,7 +1215,7 @@ is often disabled (see prevent-compression). This can have an impact on speed as well, although it's probably smaller than you might think. Again, the page size, etc. will determine how much of an impact. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.2. I notice considerable delays in page requests. What's wrong? @@ -1233,7 +1239,7 @@ filtered, could be. Privoxy only knows how to differentiate filterable content because of the MIME type as reported by the server, or because of some configuration setting that enables/disables filtering. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.3. What are "http://config.privoxy.org/" and "http://p.p/"? @@ -1251,14 +1257,14 @@ instead, then your browser didn't use Privoxy for the request, hence it could not be intercepted, and you have accessed the real web site at config.privoxy.org. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.4. How can I submit new ads, or report problems? Please see the Contact section for various ways to interact with the developers. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.5. If I do submit missed ads, will they be included in future updates? @@ -1271,7 +1277,7 @@ low-profile sites such as for local clubs or schools. Since their reach and impact are much less, they are best handled by inclusion in the user's user.action, and thus would be unlikely to be included. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.6. Why doesn't anyone answer my support request? @@ -1281,7 +1287,7 @@ has had time to yet investigate it thoroughly, it has been reported numerous times already, or because not enough information was provided to help us help you. Your efforts are not wasted, and we do appreciate them. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.7. How can I hide my IP address? @@ -1303,7 +1309,7 @@ If you want to hide your IP address from most adversaries, you should consider chaining Privoxy with Tor. The configuration details can be found in How do I use Privoxy together with Tor section just below. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.8. Can Privoxy guarantee I am anonymous? @@ -1338,14 +1344,14 @@ that might occur. The professionally paranoid prefer browsers available as source code, because anticipating their behavior is easier. Trust the source, Luke! -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.9. A test site says I am not using a Proxy. Good! Actually, they are probably testing for some other kinds of proxies. Hiding yourself completely would require additional steps. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.10. How do I use Privoxy together with Tor? @@ -1409,7 +1415,7 @@ documentation. Make sure you understand what Tor does, why it is no replacement for application level security, and why you probably don't want to use it for unencrypted logins. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.11. Might some things break because header information or content is being altered? @@ -1444,7 +1450,7 @@ If you have problems with a site, you will have to adjust your configuration accordingly. Cookies are probably the most likely adjustment that may be required, but by no means the only one. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.12. Can Privoxy act as a "caching" proxy to speed up web browsing? @@ -1453,7 +1459,7 @@ Polipo for this. And, yes, before you ask, Privoxy can co-exist with other kinds of proxies like Squid. See the forwarding chapter in the user manual for details. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.13. What about as a firewall? Can Privoxy protect me? @@ -1461,7 +1467,7 @@ Not in the way you mean, or in the way some firewall vendors claim they can. Privoxy can help protect your privacy, but can't protect your system from intrusion attempts. It is, of course, perfectly possible to use both. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.14. I have large empty spaces / a checkerboard pattern now where ads used to be. Why? @@ -1485,7 +1491,7 @@ empty space, or the familiar checkerboard pattern. So the developers won't support this in the default configuration, but you can of course define appropriate filters yourself to achieve this. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.15. How can Privoxy filter Secure (HTTPS) URLs? @@ -1510,7 +1516,7 @@ content, see filter{content-cookies}), in an SSL transaction will be impossible to block under these conditions. Fortunately, this does not seem to be a very common scenario since most cookies come by traditional means. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.16. Privoxy runs as a "server". How secure is it? Do I need to take any special precautions? @@ -1529,7 +1535,7 @@ configuration, but Privoxy will not listen on any external interfaces. ACLs can be defined in addition, and using a firewall is always good too. Better safe than sorry. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.17. Can I temporarily disable Privoxy? @@ -1543,7 +1549,7 @@ See the Bookmarklets section of the User Manual for an easy way to access this feature. Note that this is a feature that may need to be enabled in the main config file. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.18. When "disabled" is Privoxy totally out of the picture? @@ -1552,7 +1558,7 @@ still acting as a proxy, but just doing less of the things that Privoxy would normally be expected to do. It is still a "middle-man" in the interaction between your browser and web sites. See below to bypass the proxy. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.19. How can I tell Privoxy to totally ignore certain sites? @@ -1560,7 +1566,7 @@ Bypassing a proxy, or proxying based on arbitrary criteria, is purely a browser configuration issue, not a Privoxy issue. Modern browsers typically do have settings for not proxying certain sites. Check your browser's help files. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.20. My logs show Privoxy "crunches" ads, but also its own internal CGI pages. What is a "crunch"? @@ -1575,7 +1581,7 @@ browser, and the log consequently will show a "crunch". Since version 3.0.7, Privoxy will also log the crunch reason. If you are using an older version you might want to upgrade. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.21. Can Privoxy effect files that I download from a webserver? FTP server? @@ -1622,14 +1628,14 @@ where making any changes at all to the content is to be avoided. Privoxy does not do FTP at all, only HTTP and HTTPS (SSL) protocols, so please don't try. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.22. I just downloaded a Perl script, and Privoxy altered it! Yikes, what is wrong! Please read above. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.23. Should I continue to use a "HOSTS" file for ad-blocking? @@ -1651,7 +1657,7 @@ Privoxy's configuration, consider adding your list to your user.action file: etc.example.com -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.24. Where can I find more information about Privoxy and related issues? @@ -1690,7 +1696,7 @@ instant messaging, IRC, SSH, and other applications. http://www.privoxy.org/developer-manual/, the Privoxy developer manual. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.25. I've noticed that Privoxy changes "Microsoft" to "MicroSuck"! Why are you manipulating my browsing? @@ -1701,7 +1707,7 @@ filter which is clearly labeled "Text replacements for subversive browsing fun! " or you are using an older Privoxy version and have implicitly activated it by choosing the "Adventuresome" profile in the web-based editor. Please upgrade. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.26. Does Privoxy produce "valid" HTML (or XHTML)? @@ -1710,7 +1716,7 @@ are text substitutions via a Privoxy filter. While this should always conform to the HTML 4.01 specifications, it has not been validated against this or any other standard. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5. Troubleshooting @@ -1719,22 +1725,22 @@ message with every web page. Why? There are several possibilities: - • Privoxy is not running. Solution: verify that Privoxy is installed + * Privoxy is not running. Solution: verify that Privoxy is installed correctly, has not crashed, and is indeed running. Turn on Privoxy's logging, and look at the logs to see what they say. - • Or your browser is configured for a different port than what Privoxy is + * Or your browser is configured for a different port than what Privoxy is using. Solution: verify that Privoxy and your browser are set to the same port (listen-address). - • Or if using a forwarding rule, you have a configuration problem or a + * Or if using a forwarding rule, you have a configuration problem or a problem with a host in the forwarding chain. Solution: temporarily alter your configuration and take the forwarders out of the equation. - • Or you have a firewall that is interfering and blocking you. Solution: try + * Or you have a firewall that is interfering and blocking you. Solution: try disabling or removing the firewall as a simple test. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.2. Why am I getting a 503 Error (WSAECONNREFUSED) on every page? @@ -1744,7 +1750,7 @@ either fight the ZA configuration, or uninstall ZoneAlarm, and then find something better behaved in its place. Other personal firewall type products may cause similar type problems if not configured correctly. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.3. I just added a new rule, but the steenkin ad is still getting through. How? @@ -1815,7 +1821,7 @@ Request: 66.70.21.80/scripts/click.php?hid=a71b9f6504b0c5681fa5&si=Ua Despite 12 out of 32 requests being blocked, the page looked, and seemed to behave perfectly "normal" (minus some ads, of course). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.4. One of my favorite sites does not work with Privoxy. What can I do? @@ -1859,7 +1865,7 @@ tutorial with general configuration information and examples. As a last resort, you can always see if your browser has a setting that will bypass the proxy setting for selective sites. Modern browsers can do this. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.5. After installing Privoxy, I have to log in every time I start IE. What gives? @@ -1895,7 +1901,7 @@ Just set and save the password again and all should be OK. [Thanks to Ray Griffith for this submission.] -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.6. I cannot connect to any FTP sites. Privoxy is blocking me. @@ -1918,7 +1924,7 @@ Just disable the FTP setting and all will be well again. Will Privoxy ever proxy FTP traffic? Unlikely. There just is not much reason, and the work to make this happen is more than it may seem. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.7. In Mac OSX, I can't configure Microsoft Internet Explorer to use Privoxy as the HTTP proxy. @@ -1930,7 +1936,7 @@ tab. Ensure the "Web Proxy (HTTP)" checkbox is checked and enter 127.0.0.1 in the entry field. Enter 8118 in the Port field. The next time you start IE, it should reflect these values. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.8. In Mac OSX, I dragged the Privoxy folder to the trash in order to uninstall it. Now the finder tells me I don't have sufficient privileges to @@ -1945,7 +1951,7 @@ administration password. The trash may still appear full after this command; emptying the trash from the desktop should make it appear empty again. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.9. In Mac OSX Panther (10.3), images often fail to load and/or I experience random delays in page loading. I'm using localhost as my browser's proxy @@ -1955,7 +1961,7 @@ We believe this is due to an IPv6-related bug in OSX, but don't fully understand the issue yet. In any case, changing the proxy setting to 127.0.0.1 instead of localhost works around the problem. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.10. I get a completely blank page at one site. "View Source" shows only: . Without Privoxy the page loads fine. @@ -1977,7 +1983,7 @@ If that works, you may also want to report the problem to the site's webmasters, telling them to use zlib.output_compression instead of ob_gzhandler in their PHP applications (workaround) or upgrade to PHP 4.2.3 or later (fix). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.11. My logs show many "Unable to get my own hostname" lines. Why? @@ -1995,7 +2001,7 @@ been changed from the original, try reverting it to see if that helps. Make sure whatever name(s) are used for the local system, that they resolve both ways. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.12. When I try to launch Privoxy, I get an error message "port 8118 is already in use" (or similar wording). Why? @@ -2007,7 +2013,7 @@ will not work. (You can have multiple instances but they must be assigned different ports.) How and why this might happen varies from platform to platform, but you need to check your installation and start-up procedures. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.13. Pages with UTF-8 fonts are garbled. @@ -2015,7 +2021,7 @@ This is caused by the "demoronizer" filter. You should either upgrade Privoxy, or at least upgrade to the most recent default.action file available from SourceForge. Or you can simply disable the demoronizer filter. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.14. Why are binary files (such as images) corrupted when Privoxy is used? @@ -2025,7 +2031,7 @@ Privoxy's filtering (unless the web server by mistake says the file is something else). Either upgrade Privoxy, or go to the most recent default.action file available from SourceForge. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.15. What is the "demoronizer" and why is it there? @@ -2048,7 +2054,7 @@ corruption of the fonts, and thus should not be on. On the other hand, if you use non-Microsoft products, and you occasionally notice weird characters on pages, you might want to try it. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.16. Why do I keep seeing "PrivoxyWindowOpen()" in raw source code? @@ -2062,7 +2068,7 @@ it is causing a problem, such as a downloaded program source code file, then you should set an exception for this site or page such that the integrity of the page stays in tact by disabling all filtering. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.17. I am getting too many DNS errors like "404 No Such Domain". Why can't Privoxy do this better? @@ -2084,7 +2090,7 @@ not the root cause of the error. In any case, versions newer than 3.0.3 include various improvements to help Privoxy better handle these cases. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.18. At one site Privoxy just hangs, and starts taking all CPU. Why is this? @@ -2097,7 +2103,7 @@ long, long time to complete. Until a better solution comes along, disable filtering on these pages, particularly the js-annoyances and unsolicited-popups filters. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.19. I just installed Privoxy, and all my browsing has slowed to a crawl. What gives? @@ -2108,7 +2114,7 @@ components such as anti-virus software, spyware protectors, personal firewalls or similar components. Try disabling (or uninstalling) these one at a time and see if that helps. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.20. Why do my filters work on some sites but not on others? @@ -2118,7 +2124,7 @@ browser "uncompress" them. When compiled with zlib support Privoxy can decompress content before filtering, otherwise you may want to enable prevent-compression. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6. Contacting the developers, Bug Reporting and Feature Requests @@ -2126,7 +2132,7 @@ We value your feedback. In fact, we rely on it to improve Privoxy and its configuration. However, please note the following hints, so we can provide you with the best support: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.1. Get Support @@ -2146,19 +2152,19 @@ with a proper subject. Additionally you should make it clear that you want to get CC'd. Otherwise some responses will be directed to the mailing list only, and you won't see them. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.2. Reporting Problems "Problems" for our purposes, come in two forms: - • Configuration issues, such as ads that slip through, or sites that don't + * Configuration issues, such as ads that slip through, or sites that don't function properly due to one Privoxy "action" or another being turned "on". - • "Bugs" in the programming code that makes up Privoxy, such as that might + * "Bugs" in the programming code that makes up Privoxy, such as that might cause a crash. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.2.1. Reporting Ads or Other Configuration Problems @@ -2171,7 +2177,7 @@ New, improved default.action files may occasionally be made available based on your feedback. These will be announced on the ijbswa-announce list and available from our the files section of our project page. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.2.2. Reporting Bugs @@ -2199,30 +2205,30 @@ your bug still exists. Please be sure to provide the following information: - • The exact Privoxy version you are using (if you got the source from CVS, + * The exact Privoxy version you are using (if you got the source from CVS, please also provide the source code revisions as shown in http:// config.privoxy.org/show-version). - • The operating system and versions you run Privoxy on, (e.g. Windows XP + * The operating system and versions you run Privoxy on, (e.g. Windows XP SP2), if you are using a Unix flavor, sending the output of "uname -a" should do, in case of GNU/Linux, please also name the distribution. - • The name, platform, and version of the browser you were using (e.g. + * The name, platform, and version of the browser you were using (e.g. Internet Explorer v5.5 for Mac). - • The URL where the problem occurred, or some way for us to duplicate the + * The URL where the problem occurred, or some way for us to duplicate the problem (e.g. http://somesite.example.com/?somethingelse=123). - • Whether your version of Privoxy is one supplied by the Privoxy developers + * Whether your version of Privoxy is one supplied by the Privoxy developers via SourceForge, or if you got your copy somewhere else. - • Whether you are using Privoxy in tandem with another proxy such as Tor. If + * Whether you are using Privoxy in tandem with another proxy such as Tor. If so, please temporary disable the other proxy to see if the symptoms change. - • Whether you are using a personal firewall product. If so, does Privoxy work + * Whether you are using a personal firewall product. If so, does Privoxy work without it? - • Any other pertinent information to help identify the problem such as config + * Any other pertinent information to help identify the problem such as config or log file excerpts (yes, you should have log file entries for each action taken). @@ -2238,7 +2244,7 @@ automatically get a mail when someone responds to your request. The appendix of the Privoxy User Manual also has helpful information on understanding actions, and action debugging. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.3. Request New Features @@ -2246,7 +2252,7 @@ You are welcome to submit ideas on new features or other proposals for improvement through our feature request tracker at http://sourceforge.net/ tracker/?atid=361118&group_id=11118. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.4. Other @@ -2256,7 +2262,7 @@ welcome on the developers list! You can find an overview of all Privoxy-related mailing lists, including list archives, at: http://sourceforge.net/mail/? group_id=11118. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7. Privoxy Copyright, License and History @@ -2269,7 +2275,7 @@ Junkbusters, Inc. and licensed under the GNU General Public License. Portions of this document are "borrowed" from the original Junkbuster (tm) FAQ, and modified as appropriate for Privoxy. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.1. License @@ -2291,7 +2297,7 @@ this program; if not, write to the Boston, MA 02110-1301 USA -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2. History diff --git a/doc/text/user-manual.txt b/doc/text/user-manual.txt index aa815b6d..da3776be 100644 --- a/doc/text/user-manual.txt +++ b/doc/text/user-manual.txt @@ -1,8 +1,8 @@ -Privoxy 3.0.7 User Manual +Privoxy 3.0.8 User Manual [ Copyright 2001 - 2007 by Privoxy Developers ] -$Id: user-manual.sgml,v 2.49 2007/12/06 18:21:55 fabiankeil Exp $ +$Id: user-manual.sgml,v 2.52 2008/01/17 01:49:51 hal9 Exp $ The Privoxy User Manual gives users information on how to install, configure and use Privoxy. @@ -20,7 +20,7 @@ You can find the latest version of the Privoxy User Manual at http:// www.privoxy.org/user-manual/. Please see the Contact section on how to contact the developers. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- Table of Contents 1. Introduction @@ -212,63 +212,61 @@ Table of Contents 1. Introduction -This documentation is included with the current beta version of Privoxy, -v.3.0.7, and is mostly complete at this point. The most up to date reference -for the time being is still the comments in the source files and in the -individual configuration files. Development of a new version is currently -nearing completion, and includes significant changes and enhancements over -earlier versions. . +This documentation is included with the current stable version of Privoxy, +v.3.0.8. -Since this is a beta version, not all new features are well tested. This -documentation may be slightly out of sync as a result (especially with CVS -sources). And there may be bugs, though hopefully not many! - -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 1.1. Features In addition to the core features of ad blocking and cookie management, Privoxy -provides many supplemental features, some of them currently under development, -that give the end-user more control, more privacy and more freedom: +provides many supplemental features, that give the end-user more control, more +privacy and more freedom: + + * Can be run as an "intercepting" proxy, which obviates the need to configure + browsers individually. + + * Sophisticated actions and filters for manipulating both server and client + headers. + + * Can be chained with other proxies. - • Integrated browser based configuration and control utility at http:// + * Integrated browser based configuration and control utility at http:// config.privoxy.org/ (shortcut: http://p.p/). Browser-based tracing of rule and filter effects. Remote toggling. - • Web page filtering (text replacements, removes banners based on size, - invisible "web-bugs", JavaScript and HTML annoyances, pop-up windows, - header manipulation, etc.) + * Web page filtering (text replacements, removes banners based on size, + invisible "web-bugs", JavaScript and HTML annoyances, pop-up windows, etc.) - • Modularized configuration that allows for standard settings and user + * Modularized configuration that allows for standard settings and user settings to reside in separate files, so that installing updated actions files won't overwrite individual user settings. - • Support for Perl Compatible Regular Expressions in the configuration files, - and generally a more sophisticated and flexible configuration syntax over - previous versions. + * Support for Perl Compatible Regular Expressions in the configuration files, + and a more sophisticated and flexible configuration syntax. - • Improved cookie management features (e.g. session based cookies). + * Improved cookie management features (e.g. session based cookies). - • GIF de-animation. + * GIF de-animation. - • Bypass many click-tracking scripts (avoids script redirection). + * Bypass many click-tracking scripts (avoids script redirection). - • Multi-threaded (POSIX and native threads). + * Multi-threaded (POSIX and native threads). - • User-customizable HTML templates for all proxy-generated pages (e.g. + * User-customizable HTML templates for all proxy-generated pages (e.g. "blocked" page). - • Auto-detection and re-reading of config file changes. + * Auto-detection and re-reading of config file changes. - • Improved signal handling, and a true daemon mode (Unix). + * Improved signal handling, and a true daemon mode (Unix). - • Every feature now controllable on a per-site or per-location basis, + * Every feature now controllable on a per-site or per-location basis, configuration more powerful and versatile over-all. - • Many smaller new features added, limitations and bugs removed, and security + * Many smaller new features added, limitations and bugs removed, and security holes fixed. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2. Installation @@ -281,38 +279,38 @@ versions, if found. (See below for your platform). In any case be sure to backup your old configuration if it is valuable to you. See the note to upgraders section below. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1. Binary Packages How to install the binary packages depends on your operating system: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.1. Red Hat and Fedora RPMs -RPMs can be installed with rpm -Uvh privoxy-3.0.7-1.rpm, and will use /etc/ +RPMs can be installed with rpm -Uvh privoxy-3.0.8-1.rpm, and will use /etc/ privoxy for the location of configuration files. Note that on Red Hat, Privoxy will not be automatically started on system boot. You will need to enable that using chkconfig, ntsysv, or similar methods. If you have problems with failed dependencies, try rebuilding the SRC RPM: rpm ---rebuild privoxy-3.0.7-1.src.rpm. This will use your locally installed +--rebuild privoxy-3.0.8-1.src.rpm. This will use your locally installed libraries and RPM version. Also note that if you have a Junkbuster RPM installed on your system, you need to remove it first, because the packages conflict. Otherwise, RPM will try to remove Junkbuster automatically if found, before installing Privoxy. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.2. Debian and Ubuntu DEBs can be installed with apt-get install privoxy, and will use /etc/privoxy for the location of configuration files. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.3. Windows @@ -339,14 +337,14 @@ Note too that you will need to give Privoxy a user account that actually exists, or it will not be permitted to write to its log and configuration files. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.4. Solaris Create a new directory, cd to it, then unzip and untar the archive. For the most part, you'll have to figure out where things go. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.5. OS/2 @@ -362,7 +360,7 @@ starts. The directory you choose to install Privoxy into will contain all of the configuration files. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.6. Mac OSX @@ -382,7 +380,7 @@ Privoxy folder. Or, type this command in the Terminal: You will be prompted for the administrator password. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.7. AmigaOS @@ -390,7 +388,7 @@ Copy and then unpack the lha archive to a suitable location. All necessary files will be installed into Privoxy directory, including all configuration and log files. To uninstall, just remove this directory. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.8. FreeBSD @@ -404,7 +402,7 @@ The port skeleton and the package can also be downloaded from the File Release Page, but there's no reason to use them unless you're interested in the beta releases which are only available there. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.1.9. Gentoo @@ -417,9 +415,9 @@ latest changes from the Portage tree. With emerge privoxy you install the latest version. Configuration files are in /etc/privoxy, the documentation is in /usr/share/doc -/privoxy-3.0.7 and the Log directory is in /var/log/privoxy. +/privoxy-3.0.8 and the Log directory is in /var/log/privoxy. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.2. Building from Source @@ -435,8 +433,8 @@ compiler like gcc are required. When building from a source tarball, first unpack the source: - tar xzvf privoxy-3.0.7-beta-src* [.tgz or .tar.gz] - cd privoxy-3.0.7-beta + tar xzvf privoxy-3.0.8-src* [.tgz or .tar.gz] + cd privoxy-3.0.8 For retrieving the current CVS sources, you'll need a CVS client installed. @@ -563,7 +561,7 @@ For more detailed instructions on how to build Redhat RPMs, Windows self-extracting installers, building on platforms with special requirements etc, please consult the developer manual. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 2.3. Keeping your Installation Up-to-Date @@ -580,84 +578,84 @@ latest default.action file we strongly recommend that you use user.action and user.filter for your local customizations of Privoxy. See the Chapter on actions files for details. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3. What's New in this Release There are many improvements and new features since Privoxy 3.0.6, the last stable release: - • Two new actions server-header-tagger and client-header-tagger that can be + * Two new actions server-header-tagger and client-header-tagger that can be used to create arbitrary "tags" based on client and server headers. These "tags" can then subsequently be used to control the other actions used for the current request, greatly increasing Privoxy's flexibility and selectivity. See tag patterns for more information on tags. - • Header filtering is done with dedicated header filters now. As a result the + * Header filtering is done with dedicated header filters now. As a result the actions "filter-client-headers" and "filter-server-headers" that were introduced with Privoxy 3.0.5 to apply content filters to the headers have been removed. See the new actions server-header-filter and client-header-filter for details. - • There are four new options for the main config file: + * There are four new options for the main config file: - □ allow-cgi-request-crunching which allows requests for Privoxy's + + allow-cgi-request-crunching which allows requests for Privoxy's internal CGI pages to be blocked, redirected or (un)trusted like ordinary requests. - □ split-large-forms that will work around a browser bug that caused IE6 + + split-large-forms that will work around a browser bug that caused IE6 and IE7 to ignore the Submit button on the Privoxy's edit-actions-for-url CGI page. - □ accept-intercepted-requests which allows to combine Privoxy with any + + accept-intercepted-requests which allows to combine Privoxy with any packet filter to create an intercepting proxy for HTTP/1.1 requests (and for HTTP/1.0 requests with Host header set). This means clients can be forced to use Privoxy even if their proxy settings are configured differently. - □ templdir to designate an alternate location for Privoxy's locally + + templdir to designate an alternate location for Privoxy's locally customized CGI templates so that these are not overwritten during upgrades. - • A new command line option --pre-chroot-nslookup hostname to initialize the + * A new command line option --pre-chroot-nslookup hostname to initialize the resolver library before chroot'ing. On some systems this reduces the number of files that must be copied into the chroot tree. (Patch provided by Stephen Gildea) - • The forward-override action allows changing of the forwarding settings + * The forward-override action allows changing of the forwarding settings through the actions files. Combined with tags, this allows to choose the forwarder based on client headers like the User-Agent, or the request origin. - • The redirect action can now use regular expression substitutions against + * The redirect action can now use regular expression substitutions against the original URL. - • zlib support is now available as a compile time option to filter compressed + * zlib support is now available as a compile time option to filter compressed content. Patch provided by Wil Mahan. - • Improve various filters, and add new ones. + * Improve various filters, and add new ones. - • Include support for RFC 3253 so that Subversion works with Privoxy. Patch + * Include support for RFC 3253 so that Subversion works with Privoxy. Patch provided by Petr Kadlec. - • Logging can be completely turned off by not specifying a logfile directive. + * Logging can be completely turned off by not specifying a logfile directive. - • A number of improvements to Privoxy's internal CGI pages, including the use + * A number of improvements to Privoxy's internal CGI pages, including the use of favicons for error and control pages. - • Many bugfixes, memory leaks addressed, code improvements, and logging + * Many bugfixes, memory leaks addressed, code improvements, and logging improvements. For a more detailed list of changes please have a look at the ChangeLog. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 3.1. Note to Upgraders A quick list of things to be aware of before upgrading from earlier versions of Privoxy: - • The recommended way to upgrade Privoxy is to backup your old configuration + * The recommended way to upgrade Privoxy is to backup your old configuration files, install the new ones, verify that Privoxy is working correctly and finally merge back your changes using diff and maybe patch. @@ -666,54 +664,55 @@ Privoxy: files obviously don't do that and due to syntax changes using old configuration files with a new Privoxy isn't always possible anyway. - • Note that some installers remove earlier versions completely, including + * Note that some installers remove earlier versions completely, including configuration files, therefore you should really save any important configuration files! - • On the other hand, other installers don't overwrite existing configuration + * On the other hand, other installers don't overwrite existing configuration files, thinking you will want to do that yourself. - • standard.action now only includes the enabled actions. Not all actions as + * standard.action now only includes the enabled actions. Not all actions as before. - • Logging is off by default now. If you need logging, it can be turned on in - the config file. You may also want to enable logging until you verified - that the new Privoxy version is working as expected. + * In the default configuration only fatal errors are logged now. You can + change that in the debug section of the configuration file. You may also + want to enable more verbose logging until you verified that the new Privoxy + version is working as expected. - • Three other config file settings are now off by default: + * Three other config file settings are now off by default: enable-remote-toggle, enable-remote-http-toggle, and enable-edit-actions. If you use or want these, you will need to explicitly enable them, and be aware of the security issues involved. - • The "filter-client-headers" and "filter-server-headers" actions that were + * The "filter-client-headers" and "filter-server-headers" actions that were introduced with Privoxy 3.0.5 to apply content filters to the headers have been removed and replaced with new actions. See the What's New section above. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4. Quickstart to Using Privoxy - • Install Privoxy. See the Installation Section below for platform specific + * Install Privoxy. See the Installation Section below for platform specific information. - • Advanced users and those who want to offer Privoxy service to more than + * Advanced users and those who want to offer Privoxy service to more than just their local machine should check the main config file, especially the security-relevant options. These are off by default. - • Start Privoxy, if the installation program has not done this already (may + * Start Privoxy, if the installation program has not done this already (may vary according to platform). See the section Starting Privoxy. - • Set your browser to use Privoxy as HTTP and HTTPS (SSL) proxy by setting + * Set your browser to use Privoxy as HTTP and HTTPS (SSL) proxy by setting the proxy configuration for address of 127.0.0.1 and port 8118. DO NOT activate proxying for FTP or any protocols besides HTTP and HTTPS (SSL) unless you intend to prevent your browser from using these protocols. - • Flush your browser's disk and memory caches, to remove any cached ad + * Flush your browser's disk and memory caches, to remove any cached ad images. If using Privoxy to manage cookies, you should remove any currently stored cookies too. - • A default installation should provide a reasonable starting point for most. + * A default installation should provide a reasonable starting point for most. There will undoubtedly be occasions where you will want to adjust the configuration, but that can be dealt with as the need arises. Little to no initial configuration is required in most cases, you may want to enable the @@ -723,19 +722,19 @@ Privoxy: customize your installation. You might also want to look at the next section for a quick introduction to how Privoxy blocks ads and banners. - • If you experience ads that slip through, innocent images that are blocked, + * If you experience ads that slip through, innocent images that are blocked, or otherwise feel the need to fine-tune Privoxy's behavior, take a look at the actions files. As a quick start, you might find the richly commented examples helpful. You can also view and edit the actions files through the web-based user interface. The Appendix "Troubleshooting: Anatomy of an Action" has hints on how to understand and debug actions that "misbehave". - • Please see the section Contacting the Developers on how to report bugs, + * Please see the section Contacting the Developers on how to report bugs, problems with websites or to get help. - • Now enjoy surfing with enhanced control, comfort and privacy! + * Now enjoy surfing with enhanced control, comfort and privacy! -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 4.1. Quickstart to Ad Blocking @@ -783,7 +782,7 @@ page text is not touched, but images from such-and-such server are blocked. The most important actions for basic ad blocking are: block, handle-as-image, handle-as-empty-document,and set-image-blocker: - • block - this is perhaps the single most used action, and is particularly + * block - this is perhaps the single most used action, and is particularly important for ad blocking. This action stops any contact between your browser and any URL patterns that match this action's configuration. It can be used for blocking ads, but also anything that is determined to be @@ -791,7 +790,7 @@ handle-as-empty-document,and set-image-blocker: server and sends Privoxy's own built-in BLOCKED page instead to let you now what has happened (with some exceptions, see below). - • handle-as-image - tells Privoxy to treat this URL as an image. Privoxy's + * handle-as-image - tells Privoxy to treat this URL as an image. Privoxy's default configuration already does this for all common image types (e.g. GIF), but there are many situations where this is not so easy to determine. So we'll force it in these cases. This is particularly important for ad @@ -801,11 +800,11 @@ handle-as-empty-document,and set-image-blocker: limitations to this though. For instance, you can't just brute-force an image substitution for an entire HTML page in most situations. - • handle-as-empty-document - sends an empty document instead of Privoxy's + * handle-as-empty-document - sends an empty document instead of Privoxy's normal BLOCKED HTML page. This is useful for file types that are neither HTML nor images, such as blocking JavaScript files. - • set-image-blocker - tells Privoxy what to display in place of an ad image + * set-image-blocker - tells Privoxy what to display in place of an ad image that has hit a block rule. For this to come into play, the URL must match a block action somewhere in the configuration, and, it must also match an handle-as-image action. @@ -846,28 +845,28 @@ configuration. Privoxy will detect these changes automatically. A quick and simple step by step example: - • Right click on the ad image to be blocked, then select "Copy Link Location" + * Right click on the ad image to be blocked, then select "Copy Link Location" from the pop-up menu. - • Set your browser to http://config.privoxy.org/show-status + * Set your browser to http://config.privoxy.org/show-status - • Find user.action in the top section, and click on "Edit": + * Find user.action in the top section, and click on "Edit": Figure 1. Actions Files in Use [files-in-u] - • You should have a section with only block listed under "Actions:". If not, + * You should have a section with only block listed under "Actions:". If not, click a "Insert new section below" button, and in the new section that just appeared, click the Edit button right under the word "Actions:". This will bring up a list of all actions. Find block near the top, and click in the "Enabled" column, then "Submit" just below the list. - • Now, in the block actions section, click the "Add" button, and paste the + * Now, in the block actions section, click the "Add" button, and paste the URL the browser got from "Copy Link Location". Remove the http:// at the beginning of the URL. Then, click "Submit" (or "OK" if in a pop-up window). - • Now go back to the original page, and press SHIFT-Reload (or flush all + * Now go back to the original page, and press SHIFT-Reload (or flush all browser caches). The image should be gone now. This is a very crude and simple example. There might be good reasons to use a @@ -883,7 +882,7 @@ There are also various filters that can be used for ad blocking (filters are a special subset of actions). These fall into the "advanced" usage category, and are explained in depth in later sections. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5. Starting Privoxy @@ -941,7 +940,7 @@ to be used on the command line. If no configuration file is specified on the command line, Privoxy will look for a file named config in the current directory. Except on Win32 where it will try config.txt. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.1. Red Hat and Fedora @@ -956,7 +955,7 @@ Or ... # service privoxy start -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.2. Debian @@ -967,7 +966,7 @@ file. # /etc/init.d/privoxy start -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.3. Windows @@ -980,7 +979,7 @@ Privoxy can run with full Windows service functionality. On Windows only, the Privoxy program has two new command line arguments to install and uninstall Privoxy as a service. See the Windows Installation instructions for details. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.4. Solaris, NetBSD, FreeBSD, HP-UX and others @@ -989,7 +988,7 @@ Example Unix startup command: # /usr/sbin/privoxy /etc/privoxy/config -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.5. OS/2 @@ -997,7 +996,7 @@ During installation, Privoxy is configured to start automatically when the system restarts. You can start it manually by double-clicking on the Privoxy icon in the Privoxy folder. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.6. Mac OSX @@ -1012,7 +1011,7 @@ in the Terminal: You will be prompted for the administrator password. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.7. AmigaOS @@ -1022,7 +1021,7 @@ or as startup action (Miami and MiamiDx). Privoxy will automatically quit when you quit your TCP/IP stack (just ignore the harmless warning your TCP/IP stack may display that Privoxy is still running). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.8. Gentoo @@ -1040,38 +1039,38 @@ change this with the rc-update command. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 5.9. Command Line Options Privoxy may be invoked with the following command-line options: - • --version + * --version Print version info and exit. Unix only. - • --help + * --help Print short usage info and exit. Unix only. - • --no-daemon + * --no-daemon Don't become a daemon, i.e. don't fork and become process group leader, and don't detach from controlling tty. Unix only. - • --pidfile FILE + * --pidfile FILE On startup, write the process ID to FILE. Delete the FILE on exit. Failure to create or delete the FILE is non-fatal. If no FILE option is given, no PID file will be used. Unix only. - • --user USER[.GROUP] + * --user USER[.GROUP] After (optionally) writing the PID file, assume the user ID of USER, and if included the GID of GROUP. Exit if the privileges are not sufficient to do so. Unix only. - • --chroot + * --chroot Before changing to the user ID given in the --user option, chroot to that user's home directory, i.e. make the kernel pretend to the Privoxy process @@ -1079,7 +1078,7 @@ Privoxy may be invoked with the following command-line options: the impact of possible vulnerabilities in Privoxy to the files contained in that hierarchy. Unix only. - • --pre-chroot-nslookup hostname + * --pre-chroot-nslookup hostname Specifies a hostname to look up before doing a chroot. On some systems, initializing the resolver library involves reading config files from /etc @@ -1093,7 +1092,7 @@ Privoxy may be invoked with the following command-line options: servers). The hostname need not exist, but if it doesn't, an error message (which can be ignored) will be output. - • configfile + * configfile If no configfile is included on the command line, Privoxy will look for a file named "config" in the current directory (except on Win32 where it will @@ -1104,7 +1103,7 @@ On MS Windows only there are two additional command-line options to allow Privoxy to install and run as a service. See the Window Installation section for details. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6. Privoxy Configuration @@ -1112,7 +1111,7 @@ All Privoxy configuration is stored in text files. These files can be edited with a text editor. Many important aspects of Privoxy can also be controlled easily with a web browser. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.1. Controlling Privoxy with Your Web Browser @@ -1121,12 +1120,12 @@ config.privoxy.org/ (shortcut: http://p.p/), which is a built-in page and works without Internet access. You will see the following section: Privoxy Menu - ▪ View & change the current configuration - ▪ View the source code version numbers - ▪ View the request headers. - ▪ Look up which actions apply to a URL and why - ▪ Toggle Privoxy on or off - ▪ Documentation + ? View & change the current configuration + ? View the source code version numbers + ? View the request headers. + ? Look up which actions apply to a URL and why + ? Toggle Privoxy on or off + ? Documentation This should be self-explanatory. Note the first item leads to an editor for the @@ -1146,24 +1145,22 @@ Note that several of the features described above are disabled by default in Privoxy 3.0.7 beta and later. Check the configuration file to learn why and in which cases it's safe to enable them again. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 6.2. Configuration Files Overview For Unix, *BSD and Linux, all configuration files are located in /etc/privoxy/ by default. For MS Windows, OS/2, and AmigaOS these are all in the same -directory as the Privoxy executable. The name and number of configuration files -has changed from previous versions, and is subject to change as development -progresses. +directory as the Privoxy executable. The installed defaults provide a reasonable starting point, though some settings may be aggressive by some standards. For the time being, the principle configuration files are: - • The main configuration file is named config on Linux, Unix, BSD, OS/2, and + * The main configuration file is named config on Linux, Unix, BSD, OS/2, and AmigaOS and config.txt on Windows. This is a required file. - • default.action (the main actions file) is used to define which "actions" + * default.action (the main actions file) is used to define which "actions" relating to banner-blocking, images, pop-ups, content modification, cookie handling etc should be applied by default. It also defines many exceptions (both positive and negative) from this default set of actions that enable @@ -1181,7 +1178,7 @@ configuration files are: config.privoxy.org/show-status (Shortcut: http://p.p/show-status) for the various actions files. - • "Filter files" (the filter file) can be used to re-write the raw page + * "Filter files" (the filter file) can be used to re-write the raw page content, including viewable text as well as embedded HTML and JavaScript, and whatever else lurks on any given web page. The filtering jobs are only pre-defined here; whether to apply them or not is up to the actions files. @@ -1210,12 +1207,7 @@ however, that it may take one or two additional requests for the change to take effect. When changing the listening address of Privoxy, these "wake up" requests must obviously be sent to the old listening address. -While under development, the configuration content is subject to change. The -below documentation may not be accurate by the time you read this. Also, what -constitutes a "default" setting, may change, so please check all your -configuration files on important issues. - -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7. The Main Configuration File @@ -1236,7 +1228,7 @@ The main config file controls all aspects of Privoxy's operation that are not location dependent (i.e. they apply universally, no matter where you may be surfing). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.1. Local Set-up Documentation @@ -1244,7 +1236,7 @@ If you intend to operate Privoxy for more users than just yourself, it might be a good idea to let them know how to reach you, what you block and why you do that, your policies, etc. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.1.1. user-manual @@ -1290,15 +1282,15 @@ Notes: user-manual http://example.com/privoxy/user-manual/ - ┌─────────────────────────────────────────────────────────────────┐ - │ Warning │ - ├─────────────────────────────────────────────────────────────────┤ - │If set, this option should be the first option in the config │ - │file, because it is used while the config file is being read on │ - │start-up. │ - └─────────────────────────────────────────────────────────────────┘ + +-----------------------------------------------------------------+ + | Warning | + |-----------------------------------------------------------------| + |If set, this option should be the first option in the config | + |file, because it is used while the config file is being read on | + |start-up. | + +-----------------------------------------------------------------+ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.1.2. trust-info-url @@ -1332,7 +1324,7 @@ Notes: locked out from the information on why they were locked out in the first place! -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.1.3. admin-address @@ -1357,7 +1349,7 @@ Notes: If both admin-address and proxy-info-url are unset, the whole "Local Privoxy Support" box on all generated pages will not be shown. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.1.4. proxy-info-url @@ -1386,7 +1378,7 @@ Notes: This URL shouldn't be blocked ;-) -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2. Configuration and Log File Locations @@ -1398,7 +1390,7 @@ The user running Privoxy, must have read permission for all configuration files, and write permission to any files that would be modified, such as log files and actions files. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.1. confdir @@ -1422,7 +1414,7 @@ Notes: No trailing "/", please. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.2. templdir @@ -1450,7 +1442,7 @@ Notes: templates to work with Privoxy releases other than the one they were part of, though. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.3. logdir @@ -1475,7 +1467,7 @@ Notes: No trailing "/", please. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.4. actionsfile @@ -1517,7 +1509,7 @@ Notes: be consistent with the other file options and to allow previously forbidden characters. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.5. filterfile @@ -1558,7 +1550,7 @@ Notes: It is recommended to place any locally adapted filters into a separate file, such as user.filter. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.6. logfile @@ -1577,7 +1569,7 @@ Default value: Effect if unset: - Logging is disabled unless --no-daemon mode is used. + No logfile is written. Notes: @@ -1587,14 +1579,12 @@ Notes: it's not blocking an ad you think it should block) and it can help you to monitor what your browser is doing. - Many users will never look at it, however, and it's a privacy risk if third - parties can get access to it. It is therefore disabled by default in - Privoxy 3.0.7 and later. + Depending on the debug options below, the logfile may be a privacy risk if + third parties can get access to it. As most users will never look at it, + Privoxy 3.0.7 and later only log fatal errors by default. - For troubleshooting purposes, you will have to explicitly enable it. Please - don't file any support requests without trying to reproduce the problem - with logging enabled first. Once you read the log messages, you may even be - able to solve the problem on your own. + For most troubleshooting purposes, you will have to change that, please + refer to the debugging section for details. Your logfile will grow indefinitely, and you will probably want to periodically remove it. On Unix systems, you can do this with a cron job @@ -1604,7 +1594,7 @@ Notes: Any log files must be writable by whatever user Privoxy is being run as (on Unix, default user id is "privoxy"). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.7. jarfile @@ -1634,7 +1624,7 @@ Notes: useful and may be removed in future releases. Please report to the developers if you are still using it. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.2.8. trustfile @@ -1684,7 +1674,7 @@ Notes: Possible applications include limiting Internet access for children. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.3. Debugging @@ -1692,13 +1682,13 @@ These options are mainly useful when tracing a problem. Note that you might also want to invoke Privoxy with the --no-daemon command line option when debugging. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.3.1. debug Specifies: - Key values that determine what information gets logged to the logfile. + Key values that determine what information gets logged. Type of value: @@ -1706,17 +1696,17 @@ Type of value: Default value: - 12289 (i.e.: URLs plus informational and warning messages) + 0 (i.e.: only fatal errors (that cause Privoxy to exit) are logged) Effect if unset: - Nothing gets logged. + Default value is used (see above). Notes: The available debug levels are: - debug 1 # show each GET/POST/CONNECT request + debug 1 # log each request destination (and the crunch reason if Privoxy intercepted the request) debug 2 # show each connection status debug 4 # show I/O status debug 8 # show header parsing @@ -1736,19 +1726,30 @@ Notes: debug lines. A debug level of 1 is informative because it will show you each request as - it happens. 1, 4096 and 8192 are highly recommended so that you will notice - when things go wrong. The other levels are probably only of interest if you - are hunting down a specific problem. They can produce a hell of an output + it happens. 1, 4096 and 8192 are recommended so that you will notice when + things go wrong. The other levels are probably only of interest if you are + hunting down a specific problem. They can produce a hell of an output (especially 16). - If you want to use CLF (Common Log Format), you should set "debug 512" ONLY - and not enable anything else. + Privoxy used to ship with the debug levels recommended above enabled by + default, but due to privacy concerns 3.0.7 and later are configured to only + log fatal errors. + + If you are used to the more verbose settings, simply enable the debug lines + below again. + + If you want to use pure CLF (Common Log Format), you should set "debug 512" + ONLY and not enable anything else. Privoxy has a hard-coded limit for the length of log messages. If it's reached, messages are logged truncated and marked with "... [too long, truncated]". -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + Please don't file any support requests without trying to reproduce the + problem with increased debug level first. Once you read the log messages, + you may even be able to solve the problem on your own. + +------------------------------------------------------------------------------- 7.3.2. single-threaded @@ -1774,14 +1775,14 @@ Notes: This option is only there for debugging purposes. It will drastically reduce performance. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4. Access Control and Security This section of the config file controls the security-relevant aspects of Privoxy's configuration. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.1. listen-address @@ -1830,7 +1831,7 @@ Example: listen-address 192.168.0.1:8118 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.2. toggle @@ -1859,7 +1860,7 @@ Notes: The windows version will only display the toggle icon in the system tray if this option is present. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.3. enable-remote-toggle @@ -1898,7 +1899,7 @@ Notes: Note that you must have compiled Privoxy with support for this feature, otherwise this option has no effect. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.4. enable-remote-http-toggle @@ -1934,7 +1935,7 @@ Notes: This option will be removed in future releases as it has been obsoleted by the more general header taggers. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.5. enable-edit-actions @@ -1972,7 +1973,7 @@ Notes: Note that you must have compiled Privoxy with support for this feature, otherwise this option has no effect. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.6. enforce-blocks @@ -2015,7 +2016,7 @@ Examples: enforce-blocks 1 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.7. ACLs: permit-access and deny-access @@ -2096,7 +2097,7 @@ Examples: deny-access 192.168.45.73 www.dirty-stuff.example.com -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.4.8. buffer-limit @@ -2130,7 +2131,7 @@ Notes: require up to buffer-limit Kbytes each, unless you have enabled "single-threaded" above. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5. Forwarding @@ -2151,7 +2152,7 @@ server as cookie replacement to track your steps between visits. Also specified here are SOCKS proxies. Privoxy supports the SOCKS 4 and SOCKS 4A protocols. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5.1. forward @@ -2202,7 +2203,7 @@ Examples: forward .isp.example.net . -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5.2. forward-socks4 and forward-socks4a @@ -2286,7 +2287,7 @@ Examples: forward localhost/ . -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5.3. Advanced Forwarding Examples @@ -2345,7 +2346,7 @@ antivir.example.com, port 8010: forward /.*\.(exe|com|dll|zip)$ antivir.example.com:8010 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5.4. forwarded-connect-retries @@ -2388,7 +2389,7 @@ Examples: forwarded-connect-retries 1 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5.5. accept-intercepted-requests @@ -2425,7 +2426,7 @@ Examples: accept-intercepted-requests 1 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5.6. allow-cgi-request-crunching @@ -2458,7 +2459,7 @@ Examples: allow-cgi-request-crunching 1 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.5.7. split-large-forms @@ -2497,7 +2498,7 @@ Examples: split-large-forms 1 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 7.6. Windows GUI Options @@ -2565,7 +2566,7 @@ console. #hide-console -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8. Actions Files @@ -2580,7 +2581,7 @@ aggregated when applied against a given set of URLs. There are three action files included with Privoxy with differing purposes: - • default.action - is the primary action file that sets the initial values + * default.action - is the primary action file that sets the initial values for all actions. It is intended to provide a base level of functionality for Privoxy's array of features. So it is a set of broad rules that should work reasonably well as-is for most users. This is the file that the @@ -2588,12 +2589,12 @@ There are three action files included with Privoxy with differing purposes: preferences as set in standard.action, e.g. either Cautious (the default), Medium, or Advanced (see below). - • user.action - is intended to be for local site preferences and exceptions. + * user.action - is intended to be for local site preferences and exceptions. As an example, if your ISP or your bank has specific requirements, and need special handling, this kind of thing should go here. This file will not be upgraded. - • standard.action - is used only by the web based editor at http:// + * standard.action - is used only by the web based editor at http:// config.privoxy.org/edit-actions-list?f=default, to set various pre-defined sets of rules for the default actions section in default.action. @@ -2625,35 +2626,35 @@ There are three action files included with Privoxy with differing purposes: Table 1. Default Configurations - ┌──────────────────────────┬───────────┬────────────┬───────────┐ - │ Feature │ Cautious │ Medium │ Advanced │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Ad-blocking Aggressiveness│medium │high │high │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Ad-filtering by size │no │yes │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Ad-filtering by link │no │no │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Pop-up killing │blocks only│blocks only │blocks only│ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Privacy Features │low │medium │medium/high│ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Cookie handling │none │session-only│kill │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Referer forging │no │yes │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │GIF de-animation │no │yes │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Fast redirects │no │no │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │HTML taming │no │no │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │JavaScript taming │no │no │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Web-bug killing │no │yes │yes │ - ├──────────────────────────┼───────────┼────────────┼───────────┤ - │Image tag reordering │no │no │yes │ - └──────────────────────────┴───────────┴────────────┴───────────┘ + +---------------------------------------------------------------+ + | Feature | Cautious | Medium | Advanced | + |--------------------------+-----------+------------+-----------| + |Ad-blocking Aggressiveness|medium |high |high | + |--------------------------+-----------+------------+-----------| + |Ad-filtering by size |no |yes |yes | + |--------------------------+-----------+------------+-----------| + |Ad-filtering by link |no |no |yes | + |--------------------------+-----------+------------+-----------| + |Pop-up killing |blocks only|blocks only |blocks only| + |--------------------------+-----------+------------+-----------| + |Privacy Features |low |medium |medium/high| + |--------------------------+-----------+------------+-----------| + |Cookie handling |none |session-only|kill | + |--------------------------+-----------+------------+-----------| + |Referer forging |no |yes |yes | + |--------------------------+-----------+------------+-----------| + |GIF de-animation |no |yes |yes | + |--------------------------+-----------+------------+-----------| + |Fast redirects |no |no |yes | + |--------------------------+-----------+------------+-----------| + |HTML taming |no |no |yes | + |--------------------------+-----------+------------+-----------| + |JavaScript taming |no |no |yes | + |--------------------------+-----------+------------+-----------| + |Web-bug killing |no |yes |yes | + |--------------------------+-----------+------------+-----------| + |Image tag reordering |no |no |yes | + +---------------------------------------------------------------+ The list of actions files to be used are defined in the main configuration file, and are processed in the order they are defined (e.g. default.action is @@ -2681,7 +2682,7 @@ accepted or rejected, or accepted only during the current browser session (i.e. not written to disk), content can be modified, some JavaScripts tamed, user-tracking fooled, and much more. See below for a complete list of actions. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.1. Finding the Right Mix @@ -2702,7 +2703,7 @@ things. There just are too many variables, and sites are constantly changing. Sooner or later you will want to change the rules (and read this chapter again :). -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.2. How to Edit @@ -2719,7 +2720,7 @@ If you prefer plain text editing to GUIs, you can of course also directly edit the the actions files with your favorite text editor. Look at default.action which is richly commented with many good examples. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.3. How Actions are Applied to Requests @@ -2756,7 +2757,7 @@ You can trace this process for URL patterns and any given URL by visiting http: Examples and more detail on this is provided in the Appendix, Troubleshooting: Anatomy of an Action section. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.4. Patterns @@ -2806,7 +2807,7 @@ index.html matches nothing, since it would be interpreted as a domain name and there is no top-level domain called .html. So its a mistake. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.4.1. The Domain Pattern @@ -2815,11 +2816,15 @@ starts or ends with a dot, it becomes unanchored at that end. For example: .example.com - matches any domain that ENDS in .example.com + matches any domain with first-level domain com and second-level domain + example. For example www.example.com, example.com and + foo.bar.baz.example.com. Note that it wouldn't match if the second-level + domain was another-example. www. - matches any domain that STARTS with www. + matches any domain that STARTS with www. (It also matches the domain www + but most of the time that doesn't matter.) .example. @@ -2859,7 +2864,7 @@ www[1-9a-ez].example.c* While flexible, this is not the sophistication of full regular expression based syntax. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.4.2. The Path Pattern @@ -2919,7 +2924,7 @@ path starts with PaTtErN in exactly this capitalization. There are many, many good examples to be found in default.action, and more tutorials below in Appendix on regular expressions. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.4.3. The Tag Pattern @@ -2959,7 +2964,7 @@ line has already been parsed. While this is a limitation you should be aware of, this kind of indirection is seldom needed anyway and even the example doesn't make too much sense. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5. Actions @@ -2978,7 +2983,7 @@ a section of the actions file. Actions fall into three categories: - • Boolean, i.e the action can only be "enabled" or "disabled". Syntax: + * Boolean, i.e the action can only be "enabled" or "disabled". Syntax: +name # enable action name -name # disable action name @@ -2986,7 +2991,7 @@ Actions fall into three categories: Example: +block - • Parameterized, where some value is required in order to enable this type of + * Parameterized, where some value is required in order to enable this type of action. Syntax: +name{param} # enable action and set parameter to param, @@ -3001,7 +3006,7 @@ Actions fall into three categories: Example: +hide-user-agent{Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.4) Gecko/20070602 Firefox/2.0.0.4} - • Multi-value. These look exactly like parameterized actions, but they behave + * Multi-value. These look exactly like parameterized actions, but they behave differently: If the action applies multiple times to the same URL, but with different parameters, all the parameters from all matches are remembered. This is used for actions that can be executed for the same request @@ -3033,7 +3038,7 @@ actions! Last match wins. The list of valid Privoxy actions are: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.1. add-header @@ -3065,7 +3070,7 @@ Example usage: +add-header{X-User-Tracking: sucks} -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.2. block @@ -3131,7 +3136,7 @@ Example usage (section): adserver.exampleclick.net/.*\.js$ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.3. client-header-filter @@ -3177,7 +3182,7 @@ Example usage (section): -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.4. client-header-tagger @@ -3215,7 +3220,7 @@ Example usage (section): -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.5. content-type-overwrite @@ -3284,7 +3289,7 @@ Example usage (sections): www.example.net/.*style -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.6. crunch-client-header @@ -3319,11 +3324,11 @@ Notes: several different headers, or only want to modify parts of them, you should use a client-header filter. - ┌─────────────────────────────────────────────────────────────────┐ - │ Warning │ - ├─────────────────────────────────────────────────────────────────┤ - │Don't block any header without understanding the consequences. │ - └─────────────────────────────────────────────────────────────────┘ + +-----------------------------------------------------------------+ + | Warning | + |-----------------------------------------------------------------| + |Don't block any header without understanding the consequences. | + +-----------------------------------------------------------------+ Example usage (section): # Block the non-existent "Privacy-Violation:" client header @@ -3332,7 +3337,7 @@ Example usage (section): -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.7. crunch-if-none-match @@ -3378,7 +3383,7 @@ Example usage (section): / -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.8. crunch-incoming-cookies @@ -3413,7 +3418,7 @@ Example usage: +crunch-incoming-cookies -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.9. crunch-server-header @@ -3448,11 +3453,11 @@ Notes: several different headers, or only want to modify parts of them, you should use a custom server-header filter. - ┌─────────────────────────────────────────────────────────────────┐ - │ Warning │ - ├─────────────────────────────────────────────────────────────────┤ - │Don't block any header without understanding the consequences. │ - └─────────────────────────────────────────────────────────────────┘ + +-----------------------------------------------------------------+ + | Warning | + |-----------------------------------------------------------------| + |Don't block any header without understanding the consequences. | + +-----------------------------------------------------------------+ Example usage (section): # Crunch server headers that try to prevent caching @@ -3460,7 +3465,7 @@ Example usage (section): / -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.10. crunch-outgoing-cookies @@ -3495,7 +3500,7 @@ Example usage: +crunch-outgoing-cookies -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.11. deanimate-gifs @@ -3533,7 +3538,7 @@ Example usage: +deanimate-gifs{last} -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.12. downgrade-http-version @@ -3567,7 +3572,7 @@ Example usage (section): problem-host.example.com -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.13. fast-redirects @@ -3586,10 +3591,10 @@ Type: Parameter: - □ "simple-check" to just search for the string "http://" to detect + + "simple-check" to just search for the string "http://" to detect redirection URLs. - □ "check-decoded-url" to decode URLs (if necessary) before searching for + + "check-decoded-url" to decode URLs (if necessary) before searching for redirection URLs. Notes: @@ -3645,7 +3650,7 @@ Example usage: another.example.com/testing -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.14. filter @@ -3808,7 +3813,7 @@ Example usage (with filters from the distribution default.filter file). See the +filter{no-ping} # Removes non-standard ping attributes from anchor and area tags -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.15. force-text-mode @@ -3836,19 +3841,19 @@ Notes: force-text-mode declares a document as text, without looking at the "Content-Type:" first. - ┌─────────────────────────────────────────────────────────────────┐ - │ Warning │ - ├─────────────────────────────────────────────────────────────────┤ - │Think twice before activating this action. Filtering binary data │ - │with regular expressions can cause file damage. │ - └─────────────────────────────────────────────────────────────────┘ + +-----------------------------------------------------------------+ + | Warning | + |-----------------------------------------------------------------| + |Think twice before activating this action. Filtering binary data | + |with regular expressions can cause file damage. | + +-----------------------------------------------------------------+ Example usage: +force-text-mode -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.16. forward-override @@ -3866,16 +3871,16 @@ Type: Parameter: - □ "forward ." to use a direct connection without any additional proxies. + + "forward ." to use a direct connection without any additional proxies. - □ "forward 127.0.0.1:8123" to use the HTTP proxy listening at 127.0.0.1 + + "forward 127.0.0.1:8123" to use the HTTP proxy listening at 127.0.0.1 port 8123. - □ "forward-socks4a 127.0.0.1:9050 ." to use the socks4a proxy listening + + "forward-socks4a 127.0.0.1:9050 ." to use the socks4a proxy listening at 127.0.0.1 port 9050. Replace "forward-socks4a" with "forward-socks4" to use a socks4 connection (with local DNS resolution) instead. - □ "forward-socks4a 127.0.0.1:9050 proxy.example.org:8000" to use the + + "forward-socks4a 127.0.0.1:9050 proxy.example.org:8000" to use the socks4a proxy listening at 127.0.0.1 port 9050 to reach the HTTP proxy listening at proxy.example.org port 8000. Replace "forward-socks4a" with "forward-socks4" to use a socks4 connection (with local DNS @@ -3888,21 +3893,21 @@ Notes: replacement, but normally it's only used in cases where matching based on the request URL isn't sufficient. - ┌─────────────────────────────────────────────────────────────────┐ - │ Warning │ - ├─────────────────────────────────────────────────────────────────┤ - │Please read the description for the forward directives before │ - │using this action. Forwarding to the wrong people will reduce │ - │your privacy and increase the chances of man-in-the-middle │ - │attacks. │ - │ │ - │If the ports are missing or invalid, default values will be used.│ - │This might change in the future and you shouldn't rely on it. │ - │Otherwise incorrect syntax causes Privoxy to exit. │ - │ │ - │Use the show-url-info CGI page to verify that your forward │ - │settings do what you thought the do. │ - └─────────────────────────────────────────────────────────────────┘ + +-----------------------------------------------------------------+ + | Warning | + |-----------------------------------------------------------------| + |Please read the description for the forward directives before | + |using this action. Forwarding to the wrong people will reduce | + |your privacy and increase the chances of man-in-the-middle | + |attacks. | + | | + |If the ports are missing or invalid, default values will be used.| + |This might change in the future and you shouldn't rely on it. | + |Otherwise incorrect syntax causes Privoxy to exit. | + | | + |Use the show-url-info CGI page to verify that your forward | + |settings do what you thought the do. | + +-----------------------------------------------------------------+ Example usage: # Always use direct connections for requests previously tagged as @@ -3921,7 +3926,7 @@ Example usage: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.17. handle-as-empty-document @@ -3964,7 +3969,7 @@ Example usage: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.18. handle-as-image @@ -4021,7 +4026,7 @@ Example usage (sections): ad.doubleclick.net -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.19. hide-accept-language @@ -4069,7 +4074,7 @@ Example usage (section): / -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.20. hide-content-disposition @@ -4122,7 +4127,7 @@ Example usage: .sourceforge.net/tracker/download\.php -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.21. hide-if-modified-since @@ -4172,7 +4177,7 @@ Example usage (section): / -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.22. hide-forwarded-for-headers @@ -4202,7 +4207,7 @@ Example usage: +hide-forwarded-for-headers -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.23. hide-from-header @@ -4245,7 +4250,7 @@ Example usage: +hide-from-header{spam-me-senseless@sittingduck.example.com} -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.24. hide-referrer @@ -4264,17 +4269,17 @@ Type: Parameter: - □ "conditional-block" to delete the header completely if the host has + + "conditional-block" to delete the header completely if the host has changed. - □ "conditional-forge" to forge the header if the host has changed. + + "conditional-forge" to forge the header if the host has changed. - □ "block" to delete the header unconditionally. + + "block" to delete the header unconditionally. - □ "forge" to pretend to be coming from the homepage of the server we are + + "forge" to pretend to be coming from the homepage of the server we are talking to. - □ Any other string to set a user defined referrer. + + Any other string to set a user defined referrer. Notes: @@ -4312,7 +4317,7 @@ Example usage: +hide-referrer{http://www.yahoo.com/} -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.25. hide-user-agent @@ -4335,14 +4340,14 @@ Parameter: Notes: - ┌─────────────────────────────────────────────────────────────────┐ - │ Warning │ - ├─────────────────────────────────────────────────────────────────┤ - │This can lead to problems on web sites that depend on looking at │ - │this header in order to customize their content for different │ - │browsers (which, by the way, is NOT the right thing to do: good │ - │web sites work browser-independently). │ - └─────────────────────────────────────────────────────────────────┘ + +-----------------------------------------------------------------+ + | Warning | + |-----------------------------------------------------------------| + |This can lead to problems on web sites that depend on looking at | + |this header in order to customize their content for different | + |browsers (which, by the way, is NOT the right thing to do: good | + |web sites work browser-independently). | + +-----------------------------------------------------------------+ Using this action in multi-user setups or wherever different types of browsers will access the same Privoxy is not recommended. In single-user, @@ -4362,7 +4367,7 @@ Example usage: +hide-user-agent{Netscape 6.1 (X11; I; Linux 2.4.18 i686)} -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.26. inspect-jpegs @@ -4400,7 +4405,7 @@ Example usage: +inspect-jpegs -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.27. kill-popups @@ -4454,7 +4459,7 @@ Example usage: +kill-popups -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.28. limit-connect @@ -4505,7 +4510,7 @@ Example usages: +limit-connect{,} # No HTTPS/SSL traffic is allowed -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.29. prevent-compression @@ -4574,7 +4579,7 @@ Example usage (sections): .compusa.com/ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.30. overwrite-last-modified @@ -4628,7 +4633,7 @@ Example usage: / -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.31. redirect @@ -4681,7 +4686,7 @@ Example usages: undeadly.org/cgi\?action=article&sid=\d*$ -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.32. send-vanilla-wafer @@ -4715,7 +4720,7 @@ Example usage: +send-vanilla-wafer -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.33. send-wafer @@ -4749,7 +4754,7 @@ Example usage (section): my-internal-testing-server.void -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.34. server-header-filter @@ -4793,7 +4798,7 @@ Example usage (section): -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.35. server-header-tagger @@ -4836,7 +4841,7 @@ Example usage (section): -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.36. session-cookies-only @@ -4891,7 +4896,7 @@ Example usage: +session-cookies-only -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.37. set-image-blocker @@ -4912,16 +4917,16 @@ Type: Parameter: - □ "pattern" to send a built-in checkerboard pattern image. The image is + + "pattern" to send a built-in checkerboard pattern image. The image is visually decent, scales very well, and makes it obvious where banners were busted. - □ "blank" to send a built-in transparent image. This makes banners + + "blank" to send a built-in transparent image. This makes banners disappear completely, but makes it hard to detect where Privoxy has blocked images on a given page and complicates troubleshooting if Privoxy has blocked innocent images, like navigation icons. - □ "target-url" to send a redirect to target-url. You can redirect to any + + "target-url" to send a redirect to target-url. You can redirect to any image anywhere, even in your local filesystem via "file:///" URL. (But note that not all browsers support redirecting to a local file system). @@ -4958,7 +4963,7 @@ Example usage: +set-image-blocker{http://config.privoxy.org/send-banner?type=pattern} -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.38. treat-forbidden-connects-like-blocks @@ -4998,7 +5003,7 @@ Example usage: +treat-forbidden-connects-like-blocks -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.5.39. Summary @@ -5008,7 +5013,7 @@ designer may choose to design his site, and what HTTP header content, and other criteria, he may depend on. There is no way to have hard and fast rules for all sites. See the Appendix for a brief example on troubleshooting actions. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.6. Aliases @@ -5098,7 +5103,7 @@ up for the "/" pattern): Aliases like "shop" and "fragile" are typically used for "problem" sites that require more than one action to be disabled in order to function properly. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.7. Actions Files Tutorial @@ -5107,7 +5112,7 @@ organized, how actions are specified and applied to URLs, how patterns work, and how to define and use aliases. Now, let's look at an example default.action and user.action file and see how all these pieces come together: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.7.1. default.action @@ -5361,7 +5366,7 @@ wiki. The actual default.action is of course much more comprehensive, but we hope this example made clear how it works. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 8.7.2. user.action @@ -5535,7 +5540,7 @@ course matches all URL paths and patterns: / # ALL sites -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 9. Filter Files @@ -5603,7 +5608,7 @@ Appendix on regular expressions, and see the Perl manual for the s/// operator's syntax and Perl-style regular expressions in general. The below examples might also help to get you started. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 9.1. Filter File Tutorial @@ -5762,7 +5767,7 @@ liberal use of (non-interpreted!) whitespace for nicer formatting. You get the idea? -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 9.2. The Pre-defined Filters @@ -5774,15 +5779,15 @@ js-annoyances The purpose of this filter is to get rid of particularly annoying JavaScript abuse. To that end, it - □ replaces JavaScript references to the browser's referrer information + + replaces JavaScript references to the browser's referrer information with the string "Not Your Business!". This compliments the hide-referrer action on the content level. - □ removes the bindings to the DOM's unload event which we feel has no + + removes the bindings to the DOM's unload event which we feel has no right to exist and is responsible for most "exit consoles", i.e. nasty windows that pop up when you close another one. - □ removes code that causes new windows to be opened with undesired + + removes code that causes new windows to be opened with undesired properties, such as being full-screen, non-resizeable, without location, status or menu bar etc. @@ -6024,7 +6029,7 @@ hide-tor-exit-notation headers, it doesn't make it impossible for the server to detect your Tor exit node based on the IP address the request is coming from. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 10. Privoxy's Template Files @@ -6079,7 +6084,7 @@ All templates refer to a style located at http://config.privoxy.org/ send-stylesheet. This is, of course, locally served by Privoxy and the source for it can be found and edited in the cgi-style.css template. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 11. Contacting the Developers, Bug Reporting and Feature Requests @@ -6087,7 +6092,7 @@ We value your feedback. In fact, we rely on it to improve Privoxy and its configuration. However, please note the following hints, so we can provide you with the best support: -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 11.1. Get Support @@ -6107,19 +6112,19 @@ with a proper subject. Additionally you should make it clear that you want to get CC'd. Otherwise some responses will be directed to the mailing list only, and you won't see them. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 11.2. Reporting Problems "Problems" for our purposes, come in two forms: - • Configuration issues, such as ads that slip through, or sites that don't + * Configuration issues, such as ads that slip through, or sites that don't function properly due to one Privoxy "action" or another being turned "on". - • "Bugs" in the programming code that makes up Privoxy, such as that might + * "Bugs" in the programming code that makes up Privoxy, such as that might cause a crash. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 11.2.1. Reporting Ads or Other Configuration Problems @@ -6132,7 +6137,7 @@ New, improved default.action files may occasionally be made available based on your feedback. These will be announced on the ijbswa-announce list and available from our the files section of our project page. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 11.2.2. Reporting Bugs @@ -6160,30 +6165,30 @@ your bug still exists. Please be sure to provide the following information: - • The exact Privoxy version you are using (if you got the source from CVS, + * The exact Privoxy version you are using (if you got the source from CVS, please also provide the source code revisions as shown in http:// config.privoxy.org/show-version). - • The operating system and versions you run Privoxy on, (e.g. Windows XP + * The operating system and versions you run Privoxy on, (e.g. Windows XP SP2), if you are using a Unix flavor, sending the output of "uname -a" should do, in case of GNU/Linux, please also name the distribution. - • The name, platform, and version of the browser you were using (e.g. + * The name, platform, and version of the browser you were using (e.g. Internet Explorer v5.5 for Mac). - • The URL where the problem occurred, or some way for us to duplicate the + * The URL where the problem occurred, or some way for us to duplicate the problem (e.g. http://somesite.example.com/?somethingelse=123). - • Whether your version of Privoxy is one supplied by the Privoxy developers + * Whether your version of Privoxy is one supplied by the Privoxy developers via SourceForge, or if you got your copy somewhere else. - • Whether you are using Privoxy in tandem with another proxy such as Tor. If + * Whether you are using Privoxy in tandem with another proxy such as Tor. If so, please temporary disable the other proxy to see if the symptoms change. - • Whether you are using a personal firewall product. If so, does Privoxy work + * Whether you are using a personal firewall product. If so, does Privoxy work without it? - • Any other pertinent information to help identify the problem such as config + * Any other pertinent information to help identify the problem such as config or log file excerpts (yes, you should have log file entries for each action taken). @@ -6199,7 +6204,7 @@ automatically get a mail when someone responds to your request. The appendix of the Privoxy User Manual also has helpful information on understanding actions, and action debugging. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 11.3. Request New Features @@ -6207,7 +6212,7 @@ You are welcome to submit ideas on new features or other proposals for improvement through our feature request tracker at http://sourceforge.net/ tracker/?atid=361118&group_id=11118. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 11.4. Other @@ -6217,7 +6222,7 @@ welcome on the developers list! You can find an overview of all Privoxy-related mailing lists, including list archives, at: http://sourceforge.net/mail/? group_id=11118. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 12. Privoxy Copyright, License and History @@ -6227,7 +6232,7 @@ ijbswa-developers@lists.sourceforge.net> Some source code is based on code Copyright 1997 by Anonymous Coders and Junkbusters, Inc. and licensed under the GNU General Public License. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 12.1. License @@ -6249,7 +6254,7 @@ this program; if not, write to the Boston, MA 02110-1301 USA -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 12.2. History @@ -6279,7 +6284,7 @@ along the way. The result of this is Privoxy, whose first stable version, 3.0, was released August, 2002. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 12.3. Authors @@ -6387,7 +6392,7 @@ On systems that lack snprintf(), Privoxy is using a version written by Mark Martinec. On systems that lack strptime(), Privoxy is using the one from the GNU C Library written by Ulrich Drepper. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 13. See Also @@ -6426,7 +6431,7 @@ instant messaging, IRC, SSH, and other applications. http://www.privoxy.org/developer-manual/, the Privoxy developer manual. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 14. Appendix @@ -6557,7 +6562,7 @@ perlre.html For information on regular expression based substitutions and their applications in filters, please see the filter file tutorial in this manual. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 14.2. Privoxy's Internal Pages @@ -6571,31 +6576,31 @@ The URLs listed below are the special ones that allow direct access to Privoxy. Of course, Privoxy must be running to access these. If not, you will get a friendly error message. Internet access is not necessary either. - • Privoxy main page: + * Privoxy main page: http://config.privoxy.org/ There is a shortcut: http://p.p/ (But it doesn't provide a fall-back to a real page, in case the request is not sent through Privoxy) - • Show information about the current configuration, including viewing and + * Show information about the current configuration, including viewing and editing of actions files: http://config.privoxy.org/show-status - • Show the source code version numbers: + * Show the source code version numbers: http://config.privoxy.org/show-version - • Show the browser's request headers: + * Show the browser's request headers: http://config.privoxy.org/show-request - • Show which actions apply to a URL and why: + * Show which actions apply to a URL and why: http://config.privoxy.org/show-url-info - • Toggle Privoxy on or off. This feature can be turned off/on in the main + * Toggle Privoxy on or off. This feature can be turned off/on in the main config file. When toggled "off", "Privoxy" continues to run, but only as a pass-through proxy, with no actions taking place: @@ -6609,7 +6614,7 @@ friendly error message. Internet access is not necessary either. These may be bookmarked for quick reference. See next. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 14.2.1. Bookmarklets @@ -6626,20 +6631,20 @@ favorites/bookmarks. For even faster access, you can put them on the "Links" bar (IE) or the "Personal Toolbar" (Netscape), and run them with a single click. - • Privoxy - Enable + * Privoxy - Enable - • Privoxy - Disable + * Privoxy - Disable - • Privoxy - Toggle Privoxy (Toggles between enabled and disabled) + * Privoxy - Toggle Privoxy (Toggles between enabled and disabled) - • Privoxy- View Status + * Privoxy- View Status - • Privoxy - Why? + * Privoxy - Why? Credit: The site which gave us the general idea for these bookmarklets is www.bookmarklets.com. They have more information about bookmarklets. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 14.3. Chain of Events @@ -6647,14 +6652,14 @@ Let's take a quick look at how some of Privoxy's core features are triggered, and the ensuing sequence of events when a web page is requested by your browser: - • First, your web browser requests a web page. The browser knows to send the + * First, your web browser requests a web page. The browser knows to send the request to Privoxy, which will in turn, relay the request to the remote web server after passing the following tests: - • Privoxy traps any request for its own internal CGI pages (e.g http://p.p/) + * Privoxy traps any request for its own internal CGI pages (e.g http://p.p/) and sends the CGI page back to the browser. - • Next, Privoxy checks to see if the URL matches any "+block" patterns. If + * Next, Privoxy checks to see if the URL matches any "+block" patterns. If so, the URL is then blocked, and the remote web server will not be contacted. "+handle-as-image" and "+handle-as-empty-document" are then checked, and if there is no match, an HTML "BLOCKED" page is sent back to @@ -6663,30 +6668,30 @@ browser: depend on the setting of "+set-image-blocker" (blank, checkerboard pattern, or an HTTP redirect to an image elsewhere). - • Untrusted URLs are blocked. If URLs are being added to the trust file, then + * Untrusted URLs are blocked. If URLs are being added to the trust file, then that is done. - • If the URL pattern matches the "+fast-redirects" action, it is then + * If the URL pattern matches the "+fast-redirects" action, it is then processed. Unwanted parts of the requested URL are stripped. - • Now the rest of the client browser's request headers are processed. If any + * Now the rest of the client browser's request headers are processed. If any of these match any of the relevant actions (e.g. "+hide-user-agent", etc.), headers are suppressed or forged as determined by these actions and their parameters. - • Now the web server starts sending its response back (i.e. typically a web + * Now the web server starts sending its response back (i.e. typically a web page). - • First, the server headers are read and processed to determine, among other + * First, the server headers are read and processed to determine, among other things, the MIME type (document type) and encoding. The headers are then filtered as determined by the "+crunch-incoming-cookies", "+session-cookies-only", and "+downgrade-http-version" actions. - • If the "+kill-popups" action applies, and it is an HTML or JavaScript + * If the "+kill-popups" action applies, and it is an HTML or JavaScript document, the popup-code in the response is filtered on-the-fly as it is received. - • If any "+filter" action or "+deanimate-gifs" action applies (and the + * If any "+filter" action or "+deanimate-gifs" action applies (and the document type fits the action), the rest of the page is read into memory (up to a configurable limit). Then the filter rules (from default.filter and any other filter files) are processed against the buffered content. @@ -6698,7 +6703,7 @@ browser: If neither a "+filter" action or "+deanimate-gifs" matches, then Privoxy passes the raw data through to the client browser as it becomes available. - • As the browser receives the now (possibly filtered) page content, it reads + * As the browser receives the now (possibly filtered) page content, it reads and then requests any URLs that may be embedded within the page source, e.g. ad images, stylesheets, JavaScript, other HTML documents (e.g. frames), sounds, etc. For each of these objects, the browser issues a @@ -6712,7 +6717,7 @@ NOTE: This is somewhat of a simplistic overview of what happens with each URL request. For the sake of brevity and simplicity, we have focused on Privoxy's core features only. -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ +------------------------------------------------------------------------------- 14.4. Troubleshooting: Anatomy of an Action diff --git a/privoxy.1 b/privoxy.1 index 12024a1f..066a2ccd 100644 --- a/privoxy.1 +++ b/privoxy.1 @@ -3,7 +3,7 @@ .\" .\" Please send any bug reports, improvements, comments, patches, .\" etc. to Steve Cheng . -.TH "PRIVOXY" "1" "08 December 2007" "Privoxy 3.0.7 beta" "" +.TH "PRIVOXY" "1" "19 January 2008" "Privoxy 3.0.8" "" .SH NAME privoxy \- Privacy Enhancing Proxy .SH SYNOPSIS @@ -258,9 +258,6 @@ config file changes by \fBSIGHUP\fR -- it will detect them automatically. .SH "NOTES" .PP -This is a beta version of \fBPrivoxy\fR. Not -all features are well tested. -.PP Please see the \fIUser Manual\fR on how to contact the developers, for feature requests, reporting problems, and other questions. .SH "SEE ALSO" -- 2.39.2