X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/c2dafcb4e5e8c9f654c0ad5719607366cf84b75a..31fff76651610a736baa4ba6a8d67a8658be1d99:/IkiWiki/CGI.pm?ds=sidebyside diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index a6b485edb..04f24b04f 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -142,7 +142,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 attepting to login via http, not https")); + } + else { + error(gettext("login failed, perhaps you need to turn on cookies?")); + } } } @@ -229,6 +234,20 @@ 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; @@ -236,11 +255,11 @@ sub check_banned ($$) { 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."); cgi_savesession($session); - exit; + cgi_custom_failure( + $q->header(-status => "403 Forbidden"), + gettext("You are banned.")); } } } @@ -291,47 +310,6 @@ sub cgi_savesession ($) { umask($oldmask); } -# cgi_goto(CGI, [page]) -# Redirect to a specified page, or display "not found". If not specified, -# the page param from the CGI object is used. -sub cgi_goto ($;$) { - my $q = shift; - my $page = shift; - - if (!defined $page) { - $page = decode_utf8($q->param("page")); - - if (!defined $page) { - error("missing page parameter"); - } - } - - loadindex(); - - # If the page is internal (like a comment), see if it has a - # permalink. Comments do. - if (isinternal($page) && - defined $pagestate{$page}{meta}{permalink}) { - redirect($q, $pagestate{$page}{meta}{permalink}); - } - - my $link = bestlink("", $page); - - if (! length $link) { - print "Content-type: text/html\n\n"; - print misctemplate(gettext("missing page"), - "

". - sprintf(gettext("The page %s does not exist."), - htmllink("", "", $page)). - "

"); - } - else { - redirect($q, urlto($link, undef, 1)); - } - - exit; -} - sub cgi (;$$) { my $q=shift; my $session=shift; @@ -358,7 +336,7 @@ sub cgi (;$$) { error("\"do\" parameter missing"); } } - + # Need to lock the wiki before getting a session. lockwiki(); loadindex();