ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/myhttpd/access.pl
Revision: 1.8
Committed: Sun Aug 26 14:55:46 2001 UTC (22 years, 10 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.7: +20 -108 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 package conn;
2
3 our %blockuri;
4 our $blockref;
5
6 sub read_blockuri {
7 local *B;
8 my %group;
9 %blockuri = ();
10 if (open B, "<blockuri") {
11 while (<B>) {
12 chomp;
13 if (/^group\s+(\S+)\s+(.*)/i) {
14 $group{$1} = [split /\s+/, $2];
15 } elsif (/^!([^\t]*)\t\s*(.*)/) {
16 my $g = $1;
17 my @r;
18 for (split /\s+/, $2) {
19 push @r, $group{$_} ? @{$group{$_}} : $_;
20 }
21 print "not($g) => (@r)\n";
22 push @{$blockuri{$_}}, $g for @r;
23 push @blockuri, [qr/$g/i, \@r];
24 } elsif (/\S/) {
25 print "blockuri: unparsable line: $_\n";
26 }
27 }
28 for (keys %blockuri) {
29 my $qr = join ")|(?:", @{$blockuri{$_}};
30 $blockuri{$_} = qr{(?:$qr)}i;
31 }
32 } else {
33 print "no blockuri\n";
34 }
35 }
36
37 sub read_blockref {
38 local *B;
39 my @blockref;
40 if (open B, "<blockreferer") {
41 while (<B>) {
42 chomp;
43 if (/^([^\t]*)\t\s*(.*)/) {
44 push @blockref, $1;
45 } elsif (/\S/) {
46 print "blockref: unparsable line: $_\n";
47 }
48 }
49 $blockref = join ")|(?:", @blockref;
50 $blockref = qr{^(?:$blockref)}i;
51 } else {
52 print "no blockref\n";
53 $blockref = qr{^x^};
54 }
55 }
56
57 read_blockuri;
58 read_blockref;
59
60 use Tie::Cache;
61 tie %whois_cache, Tie::Cache::, $::MAX_CONNECTS * 1.5;
62
63 sub access_check {
64 my $self = shift;
65
66 my $ref = $self->{h}{referer};
67 my $uri = $self->{path};
68 my %disallow;
69
70 $self->err_block_referer
71 if $self->{h}{referer} =~ $blockref;
72
73 my $whois = $whois_cache{$self->{remote_addr}}
74 ||= ::ip_request($self->{remote_addr});
75
76 my $country = "XX";
77
78 if ($whois =~ /^\*cy: (\S+)/m) {
79 $country = uc $1;
80 } else {
81 $self->slog(9, "no country($whois)");
82 }
83
84 $self->{country} = $country;
85
86 $self->err_block_country($whois)
87 if $self->{path} =~ $blockuri{$country};
88 }
89
90 1;