ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/myhttpd/access.pl
Revision: 1.7
Committed: Mon Aug 20 16:58:19 2001 UTC (22 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.6: +4 -3 lines
Log Message:
*** empty log message ***

File Contents

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