X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/c886bea32084a920f3ba26b3f96327681f5db917..b8ed5e72286ab0c592ea62a24a0ac160647d612d:/IkiWiki/CGI.pm diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index c91914564..9277223f0 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -40,7 +40,8 @@ sub showform ($$$$;@) { sub redirect ($$) { my $q=shift; - my $url=shift; + eval q{use URI}; + my $url=URI->new(shift); if (! $config{w3mmode}) { print $q->redirect($url); } @@ -142,7 +143,12 @@ sub cgi_postsignin ($$) { exit; } else { - error(gettext("login failed, perhaps you need to turn on cookies?")); + if ($config{sslcookie} && ! $q->https()) { + error(gettext("probable misconfiguration: sslcookie is set, but you are attempting to login via http, not https")); + } + else { + error(gettext("login failed, perhaps you need to turn on cookies?")); + } } } @@ -229,23 +235,48 @@ sub cgi_prefs ($$) { showform($form, $buttons, $session, $q); } +sub cgi_custom_failure ($$) { + my $header=shift; + my $message=shift; + + print $header; + print $message; + + # Internet Explod^Hrer won't show custom 404 responses + # unless they're >= 512 bytes + print ' ' x 512; + + exit; +} + 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}}) { - print $q->header(-status => "403 Forbidden"); - $session->delete(); - print gettext("You are banned."); - # Internet Explorer won't show custom 404 responses - # unless they're >= 512 bytes - print " " x 512; - cgi_savesession($session); - exit; + 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 ($) {