64 |
## -- Setting Upper Bound for Too Many Accesses at the Same Time -- |
## -- Setting Upper Bound for Too Many Accesses at the Same Time -- |
65 |
|
|
66 |
{ |
{ |
67 |
|
my $lock_key = 'main'; |
68 |
|
my $lock_limit = $WIKI->{config}->{engine_max_access}; |
69 |
|
if ($main::ENV{HTTP_USER_AGENT} eq '' or |
70 |
|
$main::ENV{HTTP_USER_AGENT} =~ /[Bb][Oo][Tt]/) { |
71 |
|
$lock_key = 'robot-main'; |
72 |
|
$lock_limit = $WIKI->{config}->{engine_robot_max_access}; |
73 |
|
} elsif ($main::ENV{REQUEST_METHOD} eq 'POST' and |
74 |
|
$main::ENV{HTTP_USER_AGENT} =~ /Gecko/) { |
75 |
|
$lock_key = 'main-post'; |
76 |
|
} |
77 |
|
|
78 |
require SuikaWiki::DB::Util::Lock; |
require SuikaWiki::DB::Util::Lock; |
79 |
my $lock = SuikaWiki::DB::Util::Lock |
my $lock = SuikaWiki::DB::Util::Lock |
80 |
->new (-directory => $WIKI->{config}->{path_to}->{db__lock__dir}, |
->new (-directory => $WIKI->{config}->{path_to}->{db__lock__dir}, |
81 |
-name => 'main', |
-name => $lock_key, |
82 |
-share => 1, |
-share => 1, |
83 |
-limit => $WIKI->{config}->{engine_max_access}); |
-limit => $lock_limit); |
84 |
$lock->lock or do { |
$lock->lock or do { |
85 |
require SuikaWiki::Output::HTTP; |
require SuikaWiki::Output::HTTP; |
86 |
my $out = SuikaWiki::Output::HTTP->new; |
my $out = SuikaWiki::Output::HTTP->new; |
97 |
for ($wiki_name_version) { |
for ($wiki_name_version) { |
98 |
s/&/&/g; s/</</g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge; |
s/&/&/g; s/</</g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge; |
99 |
}; |
}; |
100 |
|
my $refresh = ''; |
101 |
|
my $refresh_flag = ''; |
102 |
|
if ($main::ENV{REQUEST_METHOD} eq 'GET') { |
103 |
|
$refresh = '<meta http-equiv=Refresh content=60>'; |
104 |
|
$refresh_flag = ' [Refreshed after a minute]'; |
105 |
|
} |
106 |
$out->{entity}->{body} = qq< |
$out->{entity}->{body} = qq< |
107 |
<!DOCTYPE html SYSTEM> |
<!DOCTYPE html SYSTEM> |
108 |
<title>503 WikiEngine Busy</title> |
<title>503 WikiEngine Busy$refresh_flag</title> |
109 |
|
$refresh |
110 |
<h1>WikiEngine Busy</h1> |
<h1>WikiEngine Busy</h1> |
111 |
<p>WikiEngine is now busy and is unable to complete your request. |
<p>WikiEngine is now busy and is unable to complete your request. |
112 |
Please retry again after a moment.</p> |
Please retry again after a moment.</p> |
344 |
$mode =~ tr/-/_/; |
$mode =~ tr/-/_/; |
345 |
my $data = $wiki->{input}->parameter ('wikiform__msg'); |
my $data = $wiki->{input}->parameter ('wikiform__msg'); |
346 |
if (($mode eq 'wikiform' and $page =~ /^http:/) or |
if (($mode eq 'wikiform' and $page =~ /^http:/) or |
347 |
($mode eq 'wikiform' and ($data =~ s/http:/http:/g) > 20)) { |
($mode eq 'wikiform' and ($data =~ s/http:/http:/g) > 5)) { |
348 |
$mode = 'spam'; |
$mode = 'spam'; |
349 |
push @{$wiki->{var}->{client}->{used_for_negotiate}}, 'Negotiate'; |
push @{$wiki->{var}->{client}->{used_for_negotiate}}, 'Negotiate'; |
350 |
} |
} |