ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/myhttpd/access.pl
(Generate patch)

Comparing Coro/myhttpd/access.pl (file contents):
Revision 1.5 by root, Thu Aug 16 16:40:07 2001 UTC vs.
Revision 1.6 by root, Sun Aug 19 23:57:52 2001 UTC

1 1
2our @blocklist; 2our @blockuri;
3our @blockref;
3 4
4sub read_blocklist { 5sub read_blockuri {
5 local *B; 6 local *B;
6 my %group; 7 my %group;
7 @blocklist = (); 8 @blockuri = ();
8 if (open B, "<blocklist") { 9 if (open B, "<blockuri") {
9 while (<B>) { 10 while (<B>) {
10 chomp; 11 chomp;
11 if (/^group\s+(\S+)\s+(.*)/i) { 12 if (/^group\s+(\S+)\s+(.*)/i) {
12 $group{$1} = [split /\s+/, $2]; 13 $group{$1} = [split /\s+/, $2];
13 } elsif (/^!([^\t]*)\t\s*(.*)/) { 14 } elsif (/^!([^\t]*)\t\s*(.*)/) {
15 my @r; 16 my @r;
16 for (split /\s+/, $2) { 17 for (split /\s+/, $2) {
17 push @r, $group{$_} ? @{$group{$_}} : $_; 18 push @r, $group{$_} ? @{$group{$_}} : $_;
18 } 19 }
19 print "not($g) => (@r)\n"; 20 print "not($g) => (@r)\n";
20 push @blocklist, [qr/$g/i, \@r]; 21 push @blockuri, [qr/$g/i, \@r];
21 } elsif (/\S/) { 22 } elsif (/\S/) {
22 print "blocklist: unparsable line: $_\n"; 23 print "blockuri: unparsable line: $_\n";
23 } 24 }
24 } 25 }
25 } else { 26 } else {
26 print "no blocklst\n"; 27 print "no blockuri\n";
27 } 28 }
28} 29}
29 30
31sub read_blockref {
32 local *B;
33 @blockref = ();
34 if (open B, "<blockreferer") {
35 while (<B>) {
36 chomp;
37 if (/^([^\t]*)\t\s*(.*)/) {
38 push @blockref, qr/^$1/i;
39 } elsif (/\S/) {
40 print "blockref: unparsable line: $_\n";
41 }
42 }
43 } else {
44 print "no blockref\n";
45 }
46}
47
30read_blocklist; 48read_blockuri;
49read_blockref;
31 50
32use Tie::Cache; 51use Tie::Cache;
33tie %whois_cache, Tie::Cache::, $MAX_CONNECTS * 1.5; 52tie %whois_cache, Tie::Cache::, $MAX_CONNECTS * 1.5;
34 53
35sub conn::access_check { 54sub conn::err_block_country {
36 my $self = shift; 55 my $self = shift;
56 my $whois = shift;
37 57
38 my $uri = $self->{path};
39 my %disallow;
40
41 for (@blocklist) {
42 if ($uri =~ $_->[0]) {
43 $disallow{$_}++ for @{$_->[1]};
44 }
45 }
46
47 my $whois = $whois_cache{$self->{remote_addr}}
48 ||= ::ip_request($self->{remote_addr});
49
50 my $country = "XX";
51
52 if ($whois =~ /^\*cy: (\S+)/m) {
53 $country = uc $1;
54 } else {
55 $self->slog(9, "no country($whois)");
56 }
57
58 $self->{country} = $country;
59
60 if ($disallow{$country}) {
61 $self->slog(6, "DISALLOW($uri,$country)");
62
63 $whois =~ s/&/&amp;/g; 58 $whois =~ s/&/&amp;/g;
64 $whois =~ s/</&lt;/g; 59 $whois =~ s/</&lt;/g;
65 $self->err(403, "forbidden", { "Content-Type" => "text/html" }, <<EOF); 60 $self->err(403, "forbidden", { "Content-Type" => "text/html" }, <<EOF);
66<html> 61<html>
67<head> 62<head>
68<title>This material is licensed in your country!</title> 63<title>This material is licensed in your country!</title>
69</head> 64</head>
70<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#000080" alink="#ff0000"> 65<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#000080" alink="#ff0000">
71 66
72<h1>This material is licensed in your country!</h1> 67<h1>This material is licensed in your country!</h1>
73 68
74<p>My research has shown that your IP address 69<p>My research has shown that your IP address
75(<b>$self->{remote_addr}</b>) most probably is located in this country: 70(<b>$self->{remote_addr}</b>) most probably is located in this country:
76<b>$country</b> (ISO-3166-2 code, XX == unknown). The full record is:</p> 71<b>$self->{country}</b> (ISO-3166-2 code, XX == unknown). The full record is:</p>
77 72
78<pre> 73<pre>
79$whois 74$whois
80</pre> 75</pre>
81 76
95<div align="right">Thanks a lot for understanding.</div> 90<div align="right">Thanks a lot for understanding.</div>
96 91
97</body> 92</body>
98</html> 93</html>
99EOF 94EOF
95}
96
97sub conn::err_block_referer {
98 my $self = shift;
99
100 my $uri = $self->{uri};
101 $uri =~ s/\/[^\/]+$/\//;
102 $uri = escape_uri $uri;
103 print "hiho $uri\n";#d#
104
105 $self->slog(6, "REFERER($self->{uri},$self->{h}{referer})");
106
107 $whois =~ s/&/&amp;/g;
108 $whois =~ s/</&lt;/g;
109 $self->err(203, "non-authoritative", { "Content-Type" => "text/html" }, <<EOF);
110<html>
111<head>
112<title>Unallowed Referral</title>
113</head>
114<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#000080" alink="#ff0000">
115
116<h1>The site which referred you has done something bad!</h1>
117
118<p>It seems that you are coming from this URL:</p>
119
120<pre>$self->{h}{referer}</pre>
121
122<p>This site has been blocked, either because it required you to pay
123money, forced you to click on banners, claimed these files were theirs
124or something very similar. Please note that you can download these files
125<em>without</em> having to pay, <em>without</em> clicking banners or jump
126through other hoops.</p>
127
128<p><b>Sites like the one you came from actively hurt the distribution of
129these files and the service quality for you since I can't move or correct
130files and you will likely not be able to see the full archive.</b></p>
131
132<p>Having that this, you can find the original content (if it is still
133there) by <b>following <a href="$uri">this link</a>.</b></p>
134
135<div align="right">Thanks a lot for understanding.</div>
136
137</body>
138</html>
139EOF
140}
141
142sub conn::access_check {
143 my $self = shift;
144
145 my $ref = $self->{h}{referer};
146 my $uri = $self->{path};
147 my %disallow;
148
149 for (@blockref) {
150 $self->err_block_referer if $ref =~ $_;
151 }
152
153 for (@blockuri) {
154 if ($uri =~ $_->[0]) {
155 $disallow{$_}++ for @{$_->[1]};
156 }
157 }
158
159 my $whois = $whois_cache{$self->{remote_addr}}
160 ||= ::ip_request($self->{remote_addr});
161
162 my $country = "XX";
163
164 if ($whois =~ /^\*cy: (\S+)/m) {
165 $country = uc $1;
166 } else {
167 $self->slog(9, "no country($whois)");
168 }
169
170 $self->{country} = $country;
171
172 if ($disallow{$country}) {
173 $self->err_block_country($whois);
100 } 174 }
101} 175}
102 176
1031; 1771;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines