diff options
author | Joey Hess <joey@gnu.kitenet.net> | 2009-09-08 15:17:39 -0400 |
---|---|---|
committer | Joey Hess <joey@gnu.kitenet.net> | 2009-09-08 15:17:39 -0400 |
commit | 55474f44d93ffb35f650ab8ba8b32f4478eba1c3 (patch) | |
tree | 9961699802aeae133dbb0c9d74bf5a5fa2dcc5dc /IkiWiki | |
parent | 064b507c534e8ed29f3ac4201300f76e32163697 (diff) | |
download | ikiwiki-55474f44d93ffb35f650ab8ba8b32f4478eba1c3.tar ikiwiki-55474f44d93ffb35f650ab8ba8b32f4478eba1c3.tar.gz |
Expand banned_users; it can now include PageSpecs, which allows banning by IP address.
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/CGI.pm | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index af58d7cb5..52cafade0 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -252,16 +252,30 @@ sub check_banned ($$) { my $q=shift; my $session=shift; + my $banned=0; my $name=$session->param("name"); - if (defined $name) { - if (grep { $name eq $_ } @{$config{banned_users}}) { - $session->delete(); - cgi_savesession($session); - cgi_custom_failure( - $q->header(-status => "403 Forbidden"), - gettext("You are banned.")); + if (defined $name && + grep { $name eq $_ } @{$config{banned_users}}) { + $banned=1; + } + + foreach my $b (@{$config{banned_users}}) { + if (pagespec_match("", $b, + ip => $ENV{REMOTE_ADDR}, + name => defined $name ? $name : "", + )) { + $banned=1; + last; } } + + if ($banned) { + $session->delete(); + cgi_savesession($session); + cgi_custom_failure( + $q->header(-status => "403 Forbidden"), + gettext("You are banned.")); + } } sub cgi_getsession ($) { |