aboutsummaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorJoey Hess <joey@gnu.kitenet.net>2009-09-08 15:17:39 -0400
committerJoey Hess <joey@gnu.kitenet.net>2009-09-08 15:17:39 -0400
commit55474f44d93ffb35f650ab8ba8b32f4478eba1c3 (patch)
tree9961699802aeae133dbb0c9d74bf5a5fa2dcc5dc /IkiWiki
parent064b507c534e8ed29f3ac4201300f76e32163697 (diff)
downloadikiwiki-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.pm28
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 ($) {