- add sources.
[platform/framework/web/crosswalk.git] / src / net / data / proxy_resolver_perftest / no-ads.pac
1 //////////////////////////////////////////////////////////////////////////////
2 //
3 // John's No-ADS proxy auto configuration script
4 //      http://www.schooner.com/~loverso/no-ads/
5 //      loverso@schooner.com
6 //      Questions/help web forum at http://www.network54.com/Hide/Forum/223428
7 //
8 // Copyright 1996-2004, John LoVerso.  All Rights Reserved.
9 //
10 //      Permission is given to use and distribute this file, as long as this
11 //      copyright message and author notice are not removed.
12 //
13 //      No responsibility is taken for any errors on inaccuracies inherent
14 //      either to the comments or the code of this program, but if reported
15 //      to me, then an attempt will be made to fix them.
16 //
17 // ("no monies exchanged" in Copyright clause removed 11/2001)
18 //
19 var noadsver = "$Id: no-ads.pac,v 5.70 2007/05/11 16:56:01 loverso Exp loverso $";
20
21 // ****
22 // **** If you do not use a proxy to access the Internet, then the following
23 // **** line is already fine.
24 // ****
25 // **** If you use an a proxy to access the Internet, as required by your
26 // **** ISP or firewall, then change the line below, replacing
27 // **** "DIRECT" with "PROXY hostname:port", using the correct hostname:port
28 // **** for your proxy server.
29 // ****
30 var normal = "DIRECT";
31
32 // ***
33 // *** If you are not using a blackhold proxy, then you can leave this
34 // *** setting as is.
35 // ***
36 // *** Otherwise, update the next line with the correct hostname:port
37 // *** of your blackhole proxy server.  If you are using Larry Wang's
38 // *** BHP for Windows, you need to change the "0.0.0.0" to "127.0.0.1"
39 // ***
40 var blackhole = "PROXY 0.0.0.0:3421";
41
42 // ***
43 // *** If you need a different proxy to access local/internal hosts vs.
44 // *** the rest of the Internet, set 'localproxy' to that value.  Otherwise,
45 // *** 'localproxy' defaults to the same value as 'normal', so you do
46 // *** not need to change anything in the normal case.
47 // ***
48 // *** Some typical cases:
49 // ***  - 'normal' might be one proxy, and 'localproxy' might be another
50 // ***  - 'normal' might be a proxy, and 'localproxy' might be "DIRECT"
51 // ***
52 // *** You will also need to change the LOCAL section below by adding
53 // *** rules to match your local/internal hosts.
54 // ***
55 var localproxy = normal;
56
57 // ***
58 // *** 'bypass' is the preferred proxy setting for when no-ads is inactive.
59 // *** Either use '= normal' or '= localproxy' (or perhaps just "DIRECT").
60 // *** This only matters when you need to use a localproxy.
61 // *** (You probably don't need to care about this)
62 // ***
63 var bypass = normal;
64
65 ///////////////////////////////////////////////////////////////////////////////
66 //
67 // This simple kludge uses a mechanism built into most browsers (IE, Netscape,
68 // Mozilla, Firefox, and Opera) on most platforms to block connections to
69 // banner ad servers.
70 //
71 // This mechanism uses the "proxy auto configuration" to blackhole requests
72 // to load ad images without forcing all your traffic through an ad-blocking
73 // proxy server.  Of course, unlike ad-blocking proxy servers, this does not
74 // otherwise not strip cookies.
75 //
76 // "Proxy auto configuration" invokes the JavaScript FindProxyForURL function
77 // below each time your browser requests a URL.  This works even if you have
78 // JavaScript otherwise disabled in your browser!  (Which you should!)
79 //
80
81 //
82 // Send me your additions or comments.  I'll credit you in the file.
83 // (But I've removed all email addresses to stop spam harvesters).
84 //
85
86
87 ///////////////////////////////////////////////////////////////////////////////
88 //
89 // These are the basic steps needed to use "no-ads.pac".
90 // Detailed instructions follow below!
91 //
92 // 1. Save this as a file (no-ads.pac) on your local disk
93 //    (or, add it to your home page, if you have one)
94 // 2. Select a no-ads "blackhole".
95 // 3. Configure your browser to use this file as its auto proxy configuration.
96 // 4. Clear your browser's cache
97 //    (or else it may still show you ads it has saved on your disk).
98 //
99
100
101 ///////////////////////////////////////////////////////////////////////////////
102 //
103 // 1. SAVE THIS FILE
104 //
105 // Copy this file to your local machine; use your home directory (UNIX)
106 // or your Desktop or C:\ directory (Windows).
107 //
108
109
110
111 ///////////////////////////////////////////////////////////////////////////////
112 //
113 // 2. SELECT A NO-ADS BLACKHOLE
114 //
115 // You can skip this section if you are using any version of Internet Explorer.
116 // You can also skip this section for Netscape 7.1, Mozilla 1.4, or
117 // Firefox 1.0 (or later), as they include PAC failover support (but do
118 // read the note in section "2a" below).
119 //
120 //
121 // The basic trick of no-ads is to match the site or URL of annoying web content
122 // and tell your browser to use a proxy that will deny loading of that resource
123 // (image, page, etc).
124 //
125 // A "black-hole" proxy server is one that always denies loading a web page.
126 // ("send it off to a blackhole").
127 //
128 // When you initially get "no-ads.pac", it is using this as the blackhole:
129 //
130 //      "PROXY 0.0.0.0:3421"
131 //
132 // This says to use the local host at a port which nothing should be listening
133 // on.  Thus, this is "a server that doesn't repond."
134 //
135 // This is a good default for all systems, and especially Windows.
136 // However, if you are using the Blackhole Proxy Server on Windows, 
137 // be sure to change it to "PROXY 127.0.0.1:3421"
138 //
139 //
140 // Some possibilities for the blackhole:
141 //
142 //      a. A server that doesn't respond.
143 //
144 //              *** This works for all versions of Internet Explorer.
145 //              *** This mostly works for Mozilla, Firefox, and Netscape.
146 //
147 //              If you do nothing, then this is configured to direct annoying
148 //              content to the proxy running on your own host at port 3421.
149 //              Since you shouldn't have anything running on that port, that
150 //              connection will timeout and the annoying content will never be
151 //              loaded.
152 //
153 //              Older versions of Netscape wait to connect to the proxy server
154 //              (usually it needs to load part of the image to layout the web
155 //              page), and then asks if you want to disable the proxy that
156 //              doesn't answer.
157 //
158 //              Older versions of Mozilla will give an alert saying it couldn't
159 //              connect to the proxy server.
160 //
161 //              Mozilla 1.4+, Firefox 1.0+ and Netscape 7.1 will only give
162 //              you this alert if the whole page being display is blocked,
163 //              rather than just an image on that page.  Thus, I still
164 //              recommend a blackhole proxy even though it isn't needed.
165 //
166 //              Opera will disable your auto proxy config if the proxy server
167 //              doesn't respond.
168 //
169 //              IE doesn't care that the proxy server isn't responding.  As
170 //              this avoids a connection for annoying content, it is fastest.
171 //
172 //      b. A simple, blackhole server
173 //
174 //              When needed, I run a simple "server" at port 3421 that denies
175 //              all requests.  Some options you can use for this:
176 //
177 //              - On Windows, you can try Larry Wang's black-hole proxy program:
178 //
179 //                      http://leisuresuit10.tripod.com/BlackHoleProxy/
180 //
181 //                I can not vouch that his binaries are virus free, but he does
182 //                offer the source code.
183 //
184 //              - I use this shell script on UNIX; it is invoked via inetd.
185 //                /usr/local/lib/noproxy:
186 //
187 //                      #!/bin/sh
188 //                      read a
189 //                      read b
190 //                      echo HTTP/1.0 501 No Ads Accepted
191 //                      echo ""
192 //                      exit
193 //
194 //                Add this line to inetd.conf ('kill -HUP' inetd afterwards):
195 //
196 //                  3421 stream tcp nowait nobody /usr/local/lib/noproxy noproxy
197 //
198 //                This simple script doesn't work on Linux because of the
199 //                (IMHO) broken way its TCP stack works.  See the bottom of
200 //                http://www.schooner.com/~loverso/no-ads/ for a complete copy
201 //                of the `noproxy' shell script.
202 //
203 //                If always exec'ing a shell was expensive on your computer
204 //                (it isn't on mine), then you could use a "wait"-style Perl
205 //                script that would accept() incoming connections.
206 //
207 //              - Sean Burke has a black-hole proxy written in Perl script:
208 //
209 //                http://www.speech.cs.cmu.edu/~sburke/pub/black_hole_http_server.pl
210 //                (This is a standalone server, not run from inetd).
211 //
212 //      e. A trick: use an HTTP/1.0 non-proxy server
213 //
214 //              An HTTP/1.0 non-proxy server will return a 501 error when
215 //              given a proxy request.  Thus, just use the address of your
216 //              local intranet web server as your blackhole PROXY.
217 //              The downside of this is that it will probably also log an
218 //              error, which wastes a small amount of resources.
219 //
220 //      ***
221 //      *** Be sure to update the "blackhole" variable above with a setting of
222 //      *** "PROXY hostname:port" that matches your blackhole server!!
223 //      ***
224 //
225 //      ***
226 //      *** If you already use a proxy server to access the WWW,
227 //      *** change the "normal" variable above from "DIRECT" to
228 //      *** be "PROXY proxy:port" to match your proxy server.
229 //      ***
230
231
232 ///////////////////////////////////////////////////////////////////////////////
233 //
234 // 3. TO CONFIGURE YOUR BROWSER
235 //
236 // The Proxy Auto Configuration file can be either on the local disk or
237 // accessed from a web server, with the following constraints:
238 //
239 //      a. IE4 can only load the PAC from a web server (http:// URL)
240 //      b. Netscape, Mozilla, Firefox and IE (5 or later) can load the
241 //         PAC from anywhere.
242 //      c. Netscape, Mozilla, Firefox and (probably) Opera require the correct
243 //         MIME type when loading the PAC from a web server.
244 //
245 //
246 // To set the Proxy Auto Configuration with Netscape, Mozilla, or Firefox:
247 //
248 //   1. Enable Proxy Auto Config:
249 //
250 //      For Netsacpe/Mozilla:
251 //
252 //              Open "Edit->Preferences"
253 //              Select "Advanced"
254 //              Select "Proxies"
255 //
256 //      For Firefox (1.0):
257 //
258 //              Open "Tools->Options"
259 //              Select "Coonection Settings" on the General tab:
260 //
261 //      Select the "Auto proxy configuration URL" option.
262 //      Enter URL or path of where you've saved this file, such as:
263 //
264 //              http://yourserver/no-ads.pac
265 //
266 //      If you place this on your local disk, you should use a
267 //      file: URL such as:
268 //
269 //              file:/home/loverso/no-ads.pac                   (UNIX)
270 //              file:///c:/windows/desktop/no-ads.pac           (Windows)
271 //
272 //      (file:/ and file:// will work in Mozilla, but file:/// is correct
273 //      required for Firefox)
274 //
275 //   2. If you are serving this from a web server, these browsers require
276 //      the correct MIME type on the file before using it.  You must configure
277 //      your web server to provide a "application/x-ns-proxy-autoconfig"
278 //      MIME type.
279 //
280 //      a. For Apache, name the file with a ".pac" extension and add this
281 //         line to the http.conf (or the .htaccess file in the same directory):
282 //
283 //              AddType application/x-ns-proxy-autoconfig .pac
284 //
285 //      b. For IIS (instructions from Kevin Roth)
286 //
287 //         Open Internet Services Manager
288 //         Right click on the web site (or directory) you wish to change.
289 //         Choose Properties
290 //         Click the "HTTP Headers" tab
291 //         Click the "File Types" button in the "MIME Map" section
292 //         Click the "New Type..." button
293 //         Enter "pac" for "Associated Extension"
294 //         Enter "application/x-ns-proxy-autoconfig" for "Content Type (MIME)"
295 //         Click OK to close the Add type dialog, the MIME types dialog,
296 //              and the main properties dialog.
297 //
298 //      (This is definately needed for NS, but not for IE)
299 //
300 //
301 // To set the Proxy Auto Configuration with IE:
302 //
303 //   1. Enable Proxy Auto Config:
304 //
305 //      Open "Tools->Internet Options"
306 //      Select "Connections" tab
307 //      Click "LAN Settings"
308 //              or Choose an entry from "Dial-up settings" and click "Settings"
309 //
310 //      On the settings dialog, select "Use automatic configuration script"
311 //      Enter the URL of this file in Address field.
312 //
313 //              http://yourserver/no-ads.pac
314 //              file:///c:/windows/desktop/no-ads.pac           (Windows)
315 //
316 //      You can only use a file: URL with IE5 (or later).
317 //      ("file:///" with with IE versions after 5.0 SP2)
318 //
319 //   2. Fix Security Settings (IMPORTANT):
320 //
321 //      Select "Security" tab
322 //      Select "Local intranet"
323 //      Click "Sites" box
324 //      Unselect "include all sites that bypass the proxy server" option
325 //
326 //   3. Disable "Auto Proxy Caching" (IMPORTANT):
327 //      (thanks to Kevin Roth for alerting me of this!)
328 //
329 //      IE contains a proxy result caching mechanism that will defeat the
330 //      ability to block servers that server both ad and non-ad content.
331 //      To prevent this, add the registry key described in this MS KB article:
332 //
333 //              http://support.microsoft.com/?kbid=271361
334 //
335 //      You can do so by downloading this file and clicking on it to load
336 //      it into the registry.  This must be done on a per-user basis.
337 //      http://www.schooner.com/~loverso/no-ads/IE-no-auto-proxy-cache.reg
338 //
339 //   IE doesn't currently check the MIME type of the PAC file.
340 //
341 //   To see some notes from MS on PAC in IE, see
342 //      http://msdn.microsoft.com/library/periodic/period99/faq0599.htm
343 //      (they seem to have removed this URL)
344 //
345 //
346 // To set the Proxy Auto Configuration with Opera 6 (6.04 on Windows tested):
347 //
348 //   1. Enable Proxy Auto Config:
349 //      Open the Preferences (Alt-P)
350 //      Select "Network"
351 //      Click the "Proxy servers" box
352 //      Select "Use automatic proxy configuration"
353 //      Enter the URL of this file as
354 //
355 //              http://yourserver/no-ads.pac
356 //              file://c:/windows/desktop/no-ads.pac
357 //
358 //      (file:/// might be needed; I've not tested Opera lately)
359 //
360 //   2. You must use a blackhole proxy for Opera (it will not work with an
361 //      address of a server that does not respond).
362 //
363 //   3. Be sure to clear the cache and exit/restart Opera.
364 //
365
366
367 ///////////////////////////////////////////////////////////////////////////////
368 //
369 // 4. CLEAR YOUR BROWSER'S CACHE
370 //
371 // For Internet Explorer:
372 //
373 //      Open "Tools->Internet Options"
374 //      Select "Delete Files" under "Temporary Internet Files"
375 //      Click "OK"
376 //
377 // For Mozilla/Netscape Navigator:
378 //
379 //      Open "Edit->Preferences"
380 //      Select "Advanced"
381 //      Select "Proxies"
382 //      Click "Clear Disk Cache"
383 //      Click "Clear Memory Cache"
384 //
385 // For Firefox:
386 //
387 //      Open "Tools->Options"
388 //      Select the "Privay" tab
389 //      Scroll down or go to the "Cache" section
390 //      Click "Clear"
391 //
392 // For Opera:
393 //
394 //      Open "File->Preferences"
395 //      Select "History and cache"
396 //      Click "Empty now"
397 //
398
399
400 ///////////////////////////////////////////////////////////////////////////////
401 //
402 // To see the definition of this page's JavaScript contents, see
403 //
404 //      http://home.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
405 //
406 // Microsoft includes this in their KB article:
407 //
408 //      http://support.microsoft.com/support/kb/articles/Q209/2/66.ASP
409 //
410 // Special PAC functions:
411 // Hostname:
412 //      isPlainHostName(host)
413 //      dnsDomainIs(host, domain)
414 //      localHostOrDomainIs(host, hostdom)
415 //      isResolvable(host)
416 //      isInNet(host, pattern, mask)
417 // Utility:
418 //      dnsResolve(host)
419 //      myIpAddress()
420 //      dnsDomainLevels(host)
421 // URL:
422 //      shExpMatch(str, shexp)
423 // Time:
424 //      weekdayRange(wd1, wd2, gmt)
425 //      dateRange(...)
426 //      timeRange(...)
427 //
428 // Other functions and methods that may work:
429 //      http://developer.netscape.com/docs/manuals/communicator/jsref/win1.htm
430 //      Note that "alert()" only works with Netscape4 and IE, and Mozilla 1.4+.
431 //
432 // NOTE:
433 //      isInNet() will resolve a hostname to an IP address, and cause
434 //      hangs on Mozilla/Firefox.  Currently, these are stubbed out and replaced
435 //      with shExpMatch(host, "a.b.c.*"), which doesn't do the same thing,
436 //      but is sufficient for these purposes.
437 //
438 // Additional Mozilla/Firefox comments:
439 //
440 //      All the above PAC functions are implemented in JavaScript,
441 //      and are added to the body of your PAC file when it is loaded.
442 //      See the "components/nsProxyAutoConfig.js" browser install
443 //      directory.
444 //
445 //      - shExpMatch() is implemented as three pattern.replaces()
446 //               followed by a call to RegExp()  (SLOW)
447 //      - isPlainHostname() just checks for lack of "." in the string
448 //      - dnsDomainIs() just matches strings exactly
449 //      - alert() is bound to this.proxyAlert(), which displays a message
450 //              in the JavaScript console window
451
452 ///////////////////////////////////////////////////////////////////////////////
453 //
454 // Regular Expressions
455 //
456 // Angus Turnbull pointed out the JavaScript 1.2 RE operators to me.
457 // These should work in NS4 and IE4 (or later), but I have only tested on
458 // Mozilla (1.3), IE5.5, and IE6.  PLEASE TELL ME IF IT WORKS FOR YOU!
459 //
460 // A good introduction is at:
461 //      http://www.evolt.org/article/Regular_Expressions_in_JavaScript/17/36435/
462 // Some references:
463 //      (old Netscape documentation is gone)
464 //      http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/regexp.html
465 //      http://developer.netscape.com/docs/manuals/js/client/jsref/regexp.htm
466 //      http://www.webreference.com/js/column5/
467 //      http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsobjRegExpression.asp
468 //      http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/js56jsgrpRegExpSyntax.asp
469 // Real-time evaluator:
470 //      http://www.cuneytyilmaz.com/prog/jrx/
471 //
472 // I'm slowly replacing multiple glob patterns with regexps.
473 // By using RE literals of /.../ rather than the constructor 'new RegExp()',
474 // the regexps should be compiled as no-ads.pac is loaded.
475 // 
476 // Important notes:
477 // -    if using the constructor, \ needs to be quoted; thus "\\." is used
478 //      to match a literal '.'.  In the RE literal form, I need to end up
479 //      quoting any / for a URL path.
480 // -    Avoid these for now; they are broken or not supported in "older"
481 //      browsers such as NS4 and IE4:
482 //      - look-aheads (?=pat)
483 //      - non-greedy ? - a ? that follows *,+,?, and {}; (s)? is NOT non-greedy
484 //
485
486 // matches several common URL paths for ad images:
487 // such as: /banner/ /..._banner/ /banner_...
488 // but matches several words and includes plurals
489 var re_banner = /\/(.*_){0,1}(ad|adverts?|adimage|adframe|adserver|admentor|adview|banner|popup|popunder)(s)?[_.\/]/i;
490
491 // matches host names staring with "ad" but not (admin|add|adsl)
492 // or any hostname starting with "pop", "clicks", and "cash"
493 // or any hostname containing "banner"
494 // ^(ad(s)?.{0,4}\.|pop|click|cash|[^.]*banner|[^.]*adserv)
495 // ^(ad(?!(min|sl|d\.))|pop|click|cash|[^.]*banner|[^.]*adserv)
496 // ^(ad(?!(min|sl|d\.))|pop|click|cash|[^.]*banner|[^.]*adserv|.*\.ads\.)
497 var re_adhost = /^(www\.)?(ad(?!(ult|obe.*|min|sl|d|olly.*))|tology|pop|click|cash|[^.]*banner|[^.]*adserv|.+\.ads?\.)/i;
498
499 // neg:
500 //      admin.foobar.com
501 //      add.iahoo.com
502 //      adsl.allow.com
503 //      administration.all.net
504 // pos:
505 //      fire.ads.ighoo.com
506 //      ads.foo.org
507 //      ad0121.aaaa.com
508 //      adserver.goo.biz
509 //      popup.foo.bar
510
511 ///////////////////////////////////////////////////////////////////////////////
512
513 var isActive = 1;
514
515 function FindProxyForURL(url, host)
516 {
517     // debug
518     // alert("checking: url=" + url + ", host=" + host);
519
520     // Excellent kludge from Sean M. Burke:
521     // Enable or disable no-ads for the current browser session.
522     //
523     // To disable, visit this URL:              http://no-ads.int/off
524     // To re-enable, visit this URL:            http://no-ads.int/on
525     //
526     // (this will not work with Mozilla or Opera if the alert()s are present)
527     //
528     // This happens before lowercasing the URL, so make sure you use lowercase!
529     //
530     if (shExpMatch(host, "no-ads.int")) {
531         if (shExpMatch(url, "*/on*")) {
532             isActive = 1;
533             //alert("no-ads is enabled.\n" + url);
534         } else if (shExpMatch(url, "*/off*")) {
535             isActive = 0;
536             //alert("no-ads has been disabled.\n" + url);
537         } else if (shExpMatch(url, "*no-ads.int/")) {
538             alert("no-ads is "+(isActive ? "enabled" : "disabled")+".\n" + url);
539         } else {
540             alert("no-ads unknown option.\n" + url);
541         }
542
543         return blackhole;
544     }
545
546     if (!isActive) {
547         // alert("allowing (not active): return " + bypass);
548         return bypass;
549     }
550
551     // Suggestion from Quinten Martens
552     // Make everything lower case.
553     // WARNING: all shExpMatch rules following MUST be lowercase!
554     url = url.toLowerCase();
555     host = host.toLowerCase();
556
557     //
558     // Local/Internal rule
559     // matches to this rule get the 'local' proxy.
560     // Adding rules here enables the use of 'local'
561     //
562     if (0
563         // LOCAL
564         // add rules such as:
565         //      || dnsDomainIs(host, "schooner.com")
566         //      || isPlainHostName(host)
567         // or for a single host
568         //      || (host == "some-local-host")
569         ) {
570         // alert("allowing (local): return " + localproxy);
571         return localproxy;
572     }
573
574     //
575     // Whitelist section from InvisiBill
576     //
577     // Add sites here that should never be matched for ads.
578     //
579     if (0
580         // WHITELIST
581         // To add whitelist domains, simple add a line such as:
582         //      || dnsDomainIs(host, "schooner.com")
583         // or for a single host
584         //      || (host == "some-host-name")
585
586         // Note: whitelisting schooner.com will defeat the "is-it-working"
587         // test page at http://www.schooner.com/~loverso/no-ads/ads/
588
589         // Apple.com "Switch" ads
590         || shExpMatch(url, "*.apple.com/switch/ads/*")
591
592         // SprintPCS
593         || dnsDomainIs(host, ".sprintpcs.com")
594
595         // Lego
596         || dnsDomainIs(host, ".lego.com")
597
598         // Dell login popups
599         || host == "ecomm.dell.com"
600
601         || host == "click2tab.mozdev.org"
602         || host == "addons.mozilla.org"
603
604         // Uncomment for metacrawler
605         // || (host == "clickit.go2net.com")
606
607         // Wunderground weather station banners
608         || shExpMatch(url, "*banners.wunderground.com/cgi-bin/banner/ban/wxbanner*")
609         || shExpMatch(url, "*banners.wunderground.com/weathersticker/*")
610         ) {
611         // alert("allowing (whitelist): return " + normal);
612         return normal;
613     }
614
615     // To add more sites, simply include them in the correct format.
616     //
617     // The sites below are ones I currently block.  Tell me of others you add!
618
619     if (0
620         // BLOCK
621         // Block IE4/5 "favicon.ico" fetches
622         // (to avoid being tracked as having bookmarked the site)
623         || shExpMatch(url, "*/favicon.ico")
624
625         //////
626         //
627         // Global Section
628         // tries to match common names
629         //
630
631         // RE for common URL paths
632         || re_banner.test(url)
633
634         // RE for common adserver hostnames.
635         // The regexp matches all hostnames starting with "ad" that are not
636         //      admin|add|adsl
637         // (replaces explicit shExpMatch's below)
638         || re_adhost.test(host)
639
640 //      || (re_adhost.test(host)
641 //          && !(
642 //              shExpMatch(host, "add*")
643 //           || shExpMatch(host, "admin*")
644 //           || shExpMatch(host, "adsl*")
645 //         )
646 //      )
647 //      // or any subdomain "ads"
648 //      || (dnsDomainLevels(host) > 2 && shExpMatch(host, "*.ads.*"))
649
650         //////
651         //
652         // banner/ad organizations
653         // Just delete the entire namespace
654         //
655
656         // doubleclick
657         || dnsDomainIs(host, ".doubleclick.com")
658         || dnsDomainIs(host, ".doubleclick.net")
659         || dnsDomainIs(host, ".rpts.net")
660         || dnsDomainIs(host, ".2mdn.net")
661         || dnsDomainIs(host, ".2mdn.com")
662
663         // these set cookies
664         || dnsDomainIs(host, ".globaltrack.com")
665         || dnsDomainIs(host, ".burstnet.com")
666         || dnsDomainIs(host, ".adbureau.net")
667         || dnsDomainIs(host, ".targetnet.com")
668         || dnsDomainIs(host, ".humanclick.com")
669         || dnsDomainIs(host, ".linkexchange.com")
670
671         || dnsDomainIs(host, ".fastclick.com")
672         || dnsDomainIs(host, ".fastclick.net")
673
674         // one whole class C full of ad servers (fastclick)
675         // XXX this might need the resolver
676 //        || isInNet(host, "205.180.85.0", "255.255.255.0")
677         || shExpMatch(host, "205.180.85.*")
678
679         // these use 1x1 images to track you
680         || dnsDomainIs(host, ".admonitor.com")
681         || dnsDomainIs(host, ".focalink.com")
682
683         || dnsDomainIs(host, ".websponsors.com")
684         || dnsDomainIs(host, ".advertising.com")
685         || dnsDomainIs(host, ".cybereps.com")
686         || dnsDomainIs(host, ".postmasterdirect.com")
687         || dnsDomainIs(host, ".mediaplex.com")
688         || dnsDomainIs(host, ".adtegrity.com")
689         || dnsDomainIs(host, ".bannerbank.ru")
690         || dnsDomainIs(host, ".bannerspace.com")
691         || dnsDomainIs(host, ".theadstop.com")
692         || dnsDomainIs(host, ".l90.com")
693         || dnsDomainIs(host, ".webconnect.net")
694         || dnsDomainIs(host, ".avenuea.com")
695         || dnsDomainIs(host, ".flycast.com")
696         || dnsDomainIs(host, ".engage.com")
697         || dnsDomainIs(host, ".imgis.com")
698         || dnsDomainIs(host, ".datais.com")
699         || dnsDomainIs(host, ".link4ads.com")
700         || dnsDomainIs(host, ".247media.com")
701         || dnsDomainIs(host, ".hightrafficads.com")
702         || dnsDomainIs(host, ".tribalfusion.com")
703         || dnsDomainIs(host, ".rightserve.net")
704         || dnsDomainIs(host, ".admaximize.com")
705         || dnsDomainIs(host, ".valueclick.com")
706         || dnsDomainIs(host, ".adlibris.se")
707         || dnsDomainIs(host, ".vibrantmedia.com")
708         || dnsDomainIs(host, ".coremetrics.com")
709         || dnsDomainIs(host, ".vx2.cc")
710         || dnsDomainIs(host, ".webpower.com")
711         || dnsDomainIs(host, ".everyone.net")
712         || dnsDomainIs(host, ".zedo.com")
713         || dnsDomainIs(host, ".bigbangmedia.com")
714         || dnsDomainIs(host, ".ad-annex.com")
715         || dnsDomainIs(host, ".iwdirect.com")
716         || dnsDomainIs(host, ".adlink.de")
717         || dnsDomainIs(host, ".bidclix.net")
718         || dnsDomainIs(host, ".webclients.net")
719         || dnsDomainIs(host, ".linkcounter.com")
720         || dnsDomainIs(host, ".sitetracker.com")
721         || dnsDomainIs(host, ".adtrix.com")
722         || dnsDomainIs(host, ".netshelter.net")
723         || dnsDomainIs(host, ".rn11.com")
724         // http://vpdc.ru4.com/content/images/66/011.gif
725         || dnsDomainIs(host, ".ru4.com")
726         // no '.' for rightmedia.net
727         || dnsDomainIs(host, "rightmedia.net")
728         || dnsDomainIs(host, ".casalemedia.com")
729         || dnsDomainIs(host, ".casalemedia.com")
730
731         // C-J
732         || dnsDomainIs(host, ".commission-junction.com")
733         || dnsDomainIs(host, ".qkimg.net")
734         // emjcd.com ... many others
735
736         // */adv/*
737         || dnsDomainIs(host, ".bluestreak.com")
738
739         // Virtumundo -- as annoying as they get
740         || dnsDomainIs(host, ".virtumundo.com")
741         || dnsDomainIs(host, ".treeloot.com")
742         || dnsDomainIs(host, ".memberprize.com")
743
744         // internetfuel and _some_ of the sites they redirect to
745         // (more internetfuel - from Sam G)
746         || dnsDomainIs(host, ".internetfuel.net")
747         || dnsDomainIs(host, ".internetfuel.com")
748         || dnsDomainIs(host, ".peoplecaster.com")
749         || dnsDomainIs(host, ".cupidsdatabase.com")
750         || dnsDomainIs(host, ".automotive-times.com")
751         || dnsDomainIs(host, ".healthy-lifetimes.com")
752         || dnsDomainIs(host, ".us-world-business.com")
753         || dnsDomainIs(host, ".internet-2-web.com")
754         || dnsDomainIs(host, ".my-job-careers.com")
755         || dnsDomainIs(host, ".freeonline.com")
756         || dnsDomainIs(host, ".exitfuel.com")
757         || dnsDomainIs(host, ".netbroadcaster.com")
758         || dnsDomainIs(host, ".spaceports.com")
759         || dnsDomainIs(host, ".mircx.com")
760         || dnsDomainIs(host, ".exitchat.com")
761         || dnsDomainIs(host, ".atdmt.com")
762         || dnsDomainIs(host, ".partner2profit.com")
763         || dnsDomainIs(host, ".centrport.net")
764         || dnsDomainIs(host, ".centrport.com")
765         || dnsDomainIs(host, ".rampidads.com")
766
767         //////
768         //
769         // banner servers
770         // (typically these set cookies or serve animated ads)
771         //
772
773         || dnsDomainIs(host, "commonwealth.riddler.com")
774         || dnsDomainIs(host, "banner.freeservers.com")
775         || dnsDomainIs(host, "usads.futurenet.com")
776         || dnsDomainIs(host, "banners.egroups.com")
777         || dnsDomainIs(host, "ngadclient.hearme.com")
778         || dnsDomainIs(host, "affiliates.allposters.com")
779         || dnsDomainIs(host, "adincl.go2net.com")
780         || dnsDomainIs(host, "webads.bizservers.com")
781         || dnsDomainIs(host, ".addserv.com")
782         || dnsDomainIs(host, ".falkag.net")
783         || (host == "promote.pair.com")
784
785         // marketwatch.com (flash ads), but CSS get loaded
786         || (dnsDomainIs(host, ".mktw.net")
787             && !shExpMatch(url, "*/css/*"))
788         || dnsDomainIs(host, ".cjt1.net")
789         || dnsDomainIs(host, ".bns1.net")
790         
791         // "undergroundonline"
792         // comes from iframe with this url: http://mediamgr.ugo.com/html.ng/size=728x90&affiliate=megagames&channel=games&subchannel=pc&Network=affiliates&rating=g
793         || dnsDomainIs(host, "image.ugo.com")
794         || dnsDomainIs(host, "mediamgr.ugo.com")
795
796         // web ads and "cheap Long Distance"
797         || dnsDomainIs(host, "zonecms.com")
798         || dnsDomainIs(host, "zoneld.com")
799
800         // AOL
801         || dnsDomainIs(host, ".atwola.com")
802         || dnsDomainIs(host, "toolbar.aol.com")
803
804         // animated ads shown at techbargains
805         || (dnsDomainIs(host, ".overstock.com")
806             && shExpMatch(url, "*/linkshare/*"))
807         || (dnsDomainIs(host, ".supermediastore.com")
808             && shExpMatch(url, "*/lib/supermediastore/*"))
809         || (dnsDomainIs(host, ".shop4tech.com")
810             && shExpMatch(url, "*/assets/*"))
811         || (dnsDomainIs(host, ".softwareandstuff.com")
812             && shExpMatch(url, "*/media/*"))
813         || (dnsDomainIs(host, ".buy.com")
814             && shExpMatch(url, "*/affiliate/*"))
815
816         || (dnsDomainIs(host, "pdaphonehome.com")
817             && (shExpMatch(url, "*/pocketpcmagbest.gif")
818                 || shExpMatch(url, "*/link-msmobiles.gif")))
819         || (dnsDomainIs(host, "ppc4you.com")
820             && shExpMatch(url, "*/ppc_top_sites.gif"))
821
822         // more animated ads... these really drive me crazy
823         || (dnsDomainIs(host, ".freewarepalm.com")
824             && shExpMatch(url, "*/sponsors/*"))
825
826         //////
827         //
828         // popups/unders
829         //
830
831         || dnsDomainIs(host, "remotead.cnet.com")
832         || dnsDomainIs(host, ".1st-dating.com")
833         || dnsDomainIs(host, ".mousebucks.com")
834         || dnsDomainIs(host, ".yourfreedvds.com")
835         || dnsDomainIs(host, ".popupsavings.com")
836         || dnsDomainIs(host, ".popupmoney.com")
837         || dnsDomainIs(host, ".popuptraffic.com")
838         || dnsDomainIs(host, ".popupnation.com")
839         || dnsDomainIs(host, ".infostart.com")
840         || dnsDomainIs(host, ".popupad.net")
841         || dnsDomainIs(host, ".usapromotravel.com")
842         || dnsDomainIs(host, ".goclick.com")
843         || dnsDomainIs(host, ".trafficwave.net")
844         || dnsDomainIs(host, ".popupad.net")
845         || dnsDomainIs(host, ".paypopup.com")
846
847         // Popups from ezboard
848         || dnsDomainIs(host, ".greenreaper.com")
849         || dnsDomainIs(host, ".spewey.com")
850         || dnsDomainIs(host, ".englishharbour.com")
851         || dnsDomainIs(host, ".casino-trade.com")
852         || dnsDomainIs(host, "got2goshop.com")
853         // more ezboard crud (from Miika Asunta)
854         || dnsDomainIs(host, ".addynamix.com")
855         || dnsDomainIs(host, ".trafficmp.com")
856         || dnsDomainIs(host, ".makingmoneyfromhome.net")
857         || dnsDomainIs(host, ".leadcart.com")
858
859         // http://www.power-mark.com/js/popunder.js
860         || dnsDomainIs(host, ".power-mark.com")
861
862         //////
863         //
864         // User tracking (worse than ads) && hit counting "services"
865         //
866
867         // "web trends live"
868         || dnsDomainIs(host, ".webtrendslive.com")
869         || dnsDomainIs(host, ".wtlive.com")
870
871         // 1x1 tracking images
872         // ** (but also used in some pay-for-clicks that I want to follow,
873         // **  so disabled for now.  9/2001)
874         // || dnsDomainIs(host, "service.bfast.com")
875
876         // one whole class C full of ad servers
877         // XXX this might need the resolver
878 //      || isInNet(host, "66.40.16.0", "255.255.255.0")
879         || shExpMatch(host, "66.40.16.*")
880
881         || dnsDomainIs(host, ".web-stat.com")
882         || dnsDomainIs(host, ".superstats.com")
883         || dnsDomainIs(host, ".allhits.ru")
884         || dnsDomainIs(host, ".list.ru")
885         || dnsDomainIs(host, ".counted.com")
886         || dnsDomainIs(host, ".rankyou.com")
887         || dnsDomainIs(host, ".clickcash.com")
888         || dnsDomainIs(host, ".clickbank.com")
889         || dnsDomainIs(host, ".paycounter.com")
890         || dnsDomainIs(host, ".cashcount.com")
891         || dnsDomainIs(host, ".clickedyclick.com")
892         || dnsDomainIs(host, ".clickxchange.com")
893         || dnsDomainIs(host, ".sitestats.com")
894         || dnsDomainIs(host, ".site-stats.com")
895         || dnsDomainIs(host, ".hitbox.com")
896         || dnsDomainIs(host, ".exitdirect.com")
897         || dnsDomainIs(host, ".realtracker.com")
898         || dnsDomainIs(host, ".etracking.com")
899         || dnsDomainIs(host, ".livestat.com")
900         || dnsDomainIs(host, ".spylog.com")
901         || dnsDomainIs(host, ".freestats.com")
902         || dnsDomainIs(host, ".addfreestats.com")
903         || dnsDomainIs(host, ".topclicks.net")
904         || dnsDomainIs(host, ".mystat.pl")
905         || dnsDomainIs(host, ".hitz4you.de")
906         || dnsDomainIs(host, ".hitslink.com")
907         || dnsDomainIs(host, ".thecounter.com")
908         || dnsDomainIs(host, ".roiservice.com")
909         || dnsDomainIs(host, ".overture.com")
910         || dnsDomainIs(host, ".xiti.com")
911         || dnsDomainIs(host, ".cj.com")
912         || dnsDomainIs(host, ".anrdoezrs.net")
913         || dnsDomainIs(host, ".hey.it")
914         || dnsDomainIs(host, ".ppctracking.net")
915         || dnsDomainIs(host, ".darkcounter.com")
916         || dnsDomainIs(host, ".2o7.com")
917         || dnsDomainIs(host, ".2o7.net")
918         || dnsDomainIs(host, ".gostats.com")
919         || dnsDomainIs(host, ".everstats.com")
920         || dnsDomainIs(host, ".onestat.com")
921         || dnsDomainIs(host, ".statcounter.com")
922         || dnsDomainIs(host, ".trafic.ro")
923         || dnsDomainIs(host, ".exitexchange.com")
924
925         // clickability, via CNN
926         || dnsDomainIs(host, ".clickability.com")
927         || dnsDomainIs(host, ".savethis.com")
928
929         //////
930         //
931         // Dead domain parking
932         //
933         || dnsDomainIs(host, ".netster.com")
934
935         //////
936         //
937         // Search engine "optimizers"
938         //
939         || dnsDomainIs(host, ".searchmarketing.com")
940
941         //////
942         //
943         // Spyware/worms
944         //
945
946         || dnsDomainIs(host, ".friendgreetings.com")
947         || dnsDomainIs(host, ".permissionedmedia.com")
948         || dnsDomainIs(host, ".searchbarcash.com")
949
950         //////
951         //
952         // "Surveys"
953         //
954
955         || dnsDomainIs(host, ".zoomerang.com")
956
957         //////
958         //
959         // "Casino" ads (scams)
960         //
961
962         || dnsDomainIs(host, ".aceshigh.com")
963         || dnsDomainIs(host, ".idealcasino.net")
964         || dnsDomainIs(host, ".casinobar.net")
965         || dnsDomainIs(host, ".casinoionair.com")
966
967         || (dnsDomainIs(host, ".go2net.com")
968             && shExpMatch(url, "*adclick*")
969         )
970
971         //////
972         //
973         // Spammers
974         //
975
976         || dnsDomainIs(host, ".licensed-collectibles.com")
977         || dnsDomainIs(host, ".webdesignprofessional.com")
978
979         //////
980         //
981         // Directed at extra annoying places
982         //
983
984         // Attempts to download ad-supported spyware without asking first
985         || dnsDomainIs(host, ".gator.com")
986
987         // ebay
988         || ((dnsDomainIs(host, "pics.ebay.com")
989              || dnsDomainIs(host, "pics.ebaystatic.com"))
990             && shExpMatch(url, "*/pics/mops/*/*[0-9]x[0-9]*")
991         )
992         || (dnsDomainIs(host, "ebayobjects.com")
993             && shExpMatch(url, "*search/keywords*")
994         )
995         || dnsDomainIs(host, "admarketplace.com")
996         || dnsDomainIs(host, "admarketplace.net")
997
998         // Bravenet & Ezboard
999         || (dnsDomainIs(host, ".ezboard.com")
1000             && shExpMatch(url, "*/bravenet/*")
1001         )
1002         || (dnsDomainIs(host, ".bravenet.com")
1003             && (   shExpMatch(host, "*counter*")
1004                 || shExpMatch(url, "*/jsbanner*")
1005                 || shExpMatch(url, "*/bravenet/*")
1006             )
1007         )
1008
1009         // GeoCities
1010         // (checking "toto" from Prakash Persaud)
1011         || ((   dnsDomainIs(host,"geo.yahoo.com")
1012              || dnsDomainIs(host,".geocities.com"))
1013             && (
1014                    shExpMatch(url,"*/toto?s*")
1015                 || shExpMatch(url, "*geocities.com/js_source*")
1016                 || dnsDomainIs(host, "visit.geocities.com")
1017             )
1018         )
1019
1020         // Yahoo ads (direct and via Akamai)
1021         // http://us.a1.yimg.com/us.yimg.com/a/...
1022         || (dnsDomainIs(host,"yimg.com")
1023             && (   shExpMatch(url,"*yimg.com/a/*")
1024                 || shExpMatch(url,"*yimg.com/*/adv/*")
1025             )
1026         )
1027         // "eyewonder" ads at Yahoo
1028         || dnsDomainIs(host,"qz3.net")
1029         || dnsDomainIs(host,".eyewonder.com")
1030
1031         // background ad images
1032         || dnsDomainIs(host,"buzzcity.com")
1033
1034         // FortuneCity - ads and tracking
1035         || (dnsDomainIs(host,".fortunecity.com")
1036             && (    shExpMatch(url,"*/js/adscript*")
1037                  || shExpMatch(url,"*/js/fctrack*")
1038             )
1039         )
1040
1041         // zdnet
1042         // tracking webbugs:
1043         // http://gserv.zdnet.com/clear/ns.gif?a000009999999999999+2093
1044         || (dnsDomainIs(host, ".zdnet.com")
1045             && (   dnsDomainIs(host, "ads3.zdnet.com")
1046                 || host == "gserv.zdnet.com"
1047                 || shExpMatch(url, "*/texis/cs/ad.html")
1048                 || shExpMatch(url, "*/adverts")
1049              )
1050         )
1051
1052         // cnet
1053         // web bugs and ad redirections
1054         // taken care of by hostname rules:
1055         //      http://adimg.com.com/...
1056         //      http://adlog.com.com/...
1057         // http://dw.com.com/clear/c.gif
1058         // http://dw.com.com/redir?astid=2&destUrl=http%3A%2F%2Fwww.buy ...
1059         // http://mads.com.com/mac-ad?...
1060         || (host == "dw.com.com" || host == "mads.com.com")
1061         || (dnsDomainIs(host, ".com.com")
1062             && (   host == "dw.com.com"
1063                 || host == "mads.com.com"
1064              )
1065         )
1066
1067         // nytimes
1068         || (dnsDomainIs(host, ".nytimes.com")
1069             && shExpMatch(url,"*/adx/*")
1070         )
1071
1072         // pop-after
1073         || dnsDomainIs(host, ".unicast.net")
1074
1075
1076         // Be Free affiliate ads
1077         || dnsDomainIs(host, ".reporting.net")
1078         || dnsDomainIs(host, ".affliate.net")
1079         || (dnsDomainIs(host, ".akamai.net")
1080             && shExpMatch(url, "*.affiliate.net/*")
1081         )
1082
1083         // Infospace.com popunder
1084         // for "webmarket.com" & "shopping.dogpile.com" -- just say no!
1085         || (dnsDomainIs(host, ".infospace.com")
1086             && shExpMatch(url, "*/goshopping/*")
1087         )
1088         || dnsDomainIs(host, ".webmarket.com")
1089         || dnsDomainIs(host, "shopping.dogpile.com")
1090
1091         // goto.com popunder for information.gopher.com
1092         || dnsDomainIs(host, "information.gopher.com")
1093
1094         // About.com popunder and floating ad bar
1095         || (dnsDomainIs(host, ".about.com")
1096             && (0
1097             || shExpMatch(url, "*/sprinks/*")
1098             || shExpMatch(url, "*about.com/0/js/*")
1099             || shExpMatch(url, "*about.com/f/p/*")
1100             )
1101         )
1102
1103         // Dell
1104         || (dnsDomainIs(host, ".dell.com")
1105             && shExpMatch(url, "*/images/affiliates/*")
1106         )
1107
1108         // IFilm iframes
1109         || (dnsDomainIs(host, ".ifilm.com")
1110             && (shExpMatch(url, "*/partners/*")
1111                 || shExpMatch(url, "*/redirect*")
1112             )
1113         )
1114
1115         // tomshardware
1116         // they are most annoying:
1117         // - cookies on their background images to track you
1118         // - looping shockwave ads
1119         // this kills most of the crud
1120 //           || isInNet(host, "216.92.21.0", "255.255.255.0")
1121         || ((dnsDomainIs(host, ".tomshardware.com")
1122              || shExpMatch(host, "216.92.21.*"))
1123             && (   shExpMatch(url, "*/cgi-bin/banner*")
1124                 || shExpMatch(url, "*/cgi-bin/bd.m*")
1125                 || shExpMatch(url, "*/images/banner/*")
1126             )
1127         )
1128
1129         || shExpMatch(url, "*mapsonus.com/ad.images*")
1130
1131         // Slashdot: added these when I saw hidden 1x1 images with cookies
1132         || dnsDomainIs(host, "adfu.blockstackers.com")
1133         || (dnsDomainIs(host, "slashdot.org")
1134             && (
1135                    shExpMatch(url, "*/slashdot/pc.gif*")
1136                 || shExpMatch(url, "*/pagecount.gif*")
1137                 || shExpMatch(url, "*/adlog.pl*")
1138             )
1139         )
1140         || dnsDomainIs(host, "googlesyndication.com")
1141         || dnsDomainIs(host, "google-analytics.com")
1142
1143         // it-aint-cool.com
1144         || (dnsDomainIs(host, "aintitcool.com")
1145             && (
1146                    shExpMatch(url, "*/newline/*")
1147                 || shExpMatch(url, "*/drillteammedia/*")
1148                 || shExpMatch(url, "*/foxsearchlight/*")
1149                 || shExpMatch(url, "*/media/aol*")
1150                 || shExpMatch(url, "*swf")
1151             )
1152         )
1153
1154         // Staples & CrossMediaServices
1155         || (dnsDomainIs(host, ".staples.com")
1156             && shExpMatch(url, "*/pixeltracker/*")
1157         )
1158         || dnsDomainIs(host, "pt.crossmediaservices.com")
1159
1160         // OfficeMax affiliate art (affArt->affart because of toLowerCase)
1161         || (dnsDomainIs(host, ".officemax.com")
1162             && shExpMatch(url, "*/affart/*")
1163         )
1164
1165         // complicated JavaScript for directed ads!
1166 // 1/5/2004: allow /js/ as they now use it for graphs
1167 //      || (dnsDomainIs(host, ".anandtech.com")
1168 //          && (shExpMatch(url,"*/js/*")
1169 //              || shExpMatch(url,"*/bnr_*")
1170 //          )
1171 //      )
1172
1173         // hardocp
1174         // http://65.119.30.151/UploadFilesForNewegg/onlineads/newegg728hardocp.swf
1175         || (host == "hera.hardocp.com")
1176         || shExpMatch(url,"*/onlineads/*")
1177
1178         // complicated JavaScript for gliding ads!
1179         || (dnsDomainIs(host, ".fatwallet.com")
1180             && shExpMatch(url,"*/js/*")
1181         )
1182
1183         // cnet ads
1184         || dnsDomainIs(host, "promo.search.com")
1185
1186         // IMDB celeb photos
1187         // (Photos/CMSIcons->photos/cmsicons because of toLowerCase)
1188         || (dnsDomainIs(host, "imdb.com")
1189             && (   shExpMatch(url, "*/photos/cmsicons/*")
1190                 || shExpMatch(url, "*/icons/*/celeb/*")
1191                 || shExpMatch(url, "*.swf")
1192             )
1193         )
1194         // incredibly annoying IMDB shock/flash ads
1195         || dnsDomainIs(host, "kliptracker.com")
1196         || dnsDomainIs(host, "klipmart.com")
1197
1198         || host == "spinbox.techtracker.com"
1199
1200         // Amazon affiliate 'search'. retrieves a JS that writes new HTML
1201         // that references one or more images "related to your search".
1202         // (If there is a real use for rcm.amazon.com, let me know)
1203         // http://rcm.amazon.com/e/cm?t=starlingtechnolo&l=st1&search=cynicism&mode=books&p=11&o=1&bg1=CEE7FF&fc1=000000&lc1=083194&lt1=_blank
1204         || host == "rcm.amazon.com"
1205
1206         //////
1207         //
1208         // "Other Scum And Villainry"
1209         //
1210
1211         // Popup from "reserved" domains at register.com
1212         // (I considered blocking all of register.com)
1213         || (dnsDomainIs(host, ".register.com")
1214             && (shExpMatch(url,"*.js")
1215                 || shExpMatch(host, "searchtheweb*")
1216                 || shExpMatch(host, "futuresite*")
1217             )
1218         )
1219
1220         || dnsDomainIs(host, ".oingo.com")
1221         || dnsDomainIs(host, ".namingsolutions.com")
1222
1223         // "Data collection"
1224         || dnsDomainIs(host, ".coremetrics.com")
1225
1226         // Sets your home page
1227         || dnsDomainIs(host, ".firehunt.com")
1228
1229         // tracking
1230         || dnsDomainIs(host, ".appliedsemantics.com")
1231
1232         // Scum who buy ad space from the above
1233         // || dnsDomainIs(host, ".hartfordrents.com")
1234         // || dnsDomainIs(host, ".chicagocomputerrentals.com")
1235         // || dnsDomainIs(host, ".ccrsolutions.com")
1236         // || dnsDomainIs(host, ".rushcomputer.com")
1237         // || dnsDomainIs(host, ".localesimates.com")
1238         // || dnsDomainIs(host, ".unitedvision.com")
1239         // XXX this might need the resolver
1240 //      || isInNet(host, "216.216.246.31", "255.255.255.255")
1241         || (host == "216.216.246.31")
1242
1243         // avsforum ads
1244 //      || isInNet(host, "216.66.21.35", "255.255.255.255")
1245         || (host == "216.66.21.35")
1246         || dnsDomainIs(host, ".avsads.com")
1247
1248         // bogus "search" sites at non-existent sites
1249         || dnsDomainIs(host, ".search411.com")
1250
1251         // palmgear.com
1252         || (dnsDomainIs(host, ".palmgear.com")
1253             && (   shExpMatch(url, "*/adsales/*")
1254                 || shExpMatch(url, "*/emailblast*")
1255             )
1256         )
1257
1258         //////
1259         //
1260         // Contributed adult sites
1261         //
1262
1263         || dnsDomainIs(host, ".porntrack.com")
1264         || dnsDomainIs(host, ".sexe-portail.com")
1265         || dnsDomainIs(host, ".sextracker.com")
1266         || dnsDomainIs(host, ".sexspy.com")
1267         || dnsDomainIs(host, ".offshoreclicks.com")
1268         || dnsDomainIs(host, ".exxxit.com")
1269         || dnsDomainIs(host, "private-dailer.biz")
1270         || shExpMatch(url, "*retestrak.nl/misc/reet.gif")
1271         || shExpMatch(url, "*dontstayin.com/*.swf")
1272
1273         // debug
1274         // || (alertmatch("NOT:" + url) && 0)
1275
1276         ) {
1277
1278         // alert("blackholing: " + url);
1279
1280         // deny this request
1281         return blackhole;
1282
1283     } else {
1284         // debug
1285         // alert("allowing: " + url);
1286
1287         // all other requests go direct and avoid any overhead
1288         return normal;
1289     }
1290 }
1291
1292 ///////////////////////////////////////////////////////////////////////////////
1293 //
1294 // This line is just for testing; you can ignore it.  But, if you are having
1295 // problems where you think this PAC file isn't being loaded, then change this
1296 // to read "if (1)" and the alert box should appear when the browser loads this
1297 // file.
1298 //
1299 // This works for IE4, IE5, IE5.5, IE6 and Netscape 2.x, 3.x, and 4.x.
1300 // (For IE6, tested on Win2K)
1301 // This does not work for Mozilla before 1.4 (and not for Netscape 6.x).
1302 // In Mozilla 1.4+ and Fireox, this will write to the JavaScript console.
1303 //
1304 if (0) {
1305         alert("no-ads.pac: LOADED:\n" +
1306                 "       version:        "+noadsver+"\n" +
1307                 "       normal:         "+normal+"\n" +
1308                 "       blackhole:      "+blackhole+"\n" +
1309                 "       localproxy:     "+localproxy+"\n" +
1310                 "       bypass:         "+bypass+"\n"
1311                 // MSG
1312         );
1313 }
1314
1315 // The above should show you that this JavaScript is executed in an
1316 // unprotected global context.  NEVER point at someone elses autoconfig file;
1317 // always load from your own copy!
1318
1319 // an alert that returns true
1320 function alertmatch(str)
1321 {
1322         // alert("match: "+str);
1323         return 1;
1324 }
1325
1326 ///////////////////////////////////////////////////////////////////////////////
1327 //
1328 // Replacement function for dnsDomainIs().  This is to replace the
1329 // prefix problem, which a leading '.' used to be used for.
1330 //
1331 //      dnsDomainIs("bar.com", "bar.com") => true
1332 //      dnsDomainIs("www.bar.com", "bar.com") => true
1333 //      dnsDomainIs("www.foobar.com", "bar.com") => true        <<< incorrect
1334 //
1335 //      isInDomain("bar.com", "bar.com") => true
1336 //      isInDomain("www.bar.com", "bar.com") => true
1337 //      isInDomain("www.foobar.com", "bar.com") => false        <<< correct
1338 //
1339 function isInDomain(host, domain) {
1340     if (host.length > domain.length) {
1341         return (host.substring(host.length - domain.length - 1) == "."+domain);
1342     }
1343     return (host == domain);
1344 }
1345
1346 ///////////////////////////////////////////////////////////////////////////////
1347 //
1348 // Tired of reading boring comments?  Try reading today's comics:
1349 //      http://www.schooner.com/~loverso/comics/
1350 //
1351 // or getting a quote from my collection:
1352 //      http://www.schooner.com/~loverso/quote/
1353 //
1354
1355 // eof
1356         //intelliserv.net
1357         //intellisrv.net
1358         //rambler.ru
1359         //rightmedia.net
1360         //calloffate.com
1361         //fairmeasures.com
1362