fix
[ikiwiki.git] / ikiwiki
diff --git a/ikiwiki b/ikiwiki
index 0266edfa45d928cf69a1054dc3bfc00939bc71ba..ce89112de9fb02e263abd5804323bb645756bbb0 100755 (executable)
--- a/ikiwiki
+++ b/ikiwiki
@@ -432,8 +432,8 @@ sub rcs_recentchanges ($) { #{{{
                                return @ret if @ret >= $num;
                                
                                $state='header';
-                               $message=$rev=$user=$when=undef;
-                               @pages=();
+                               $rev=$user=$when=undef;
+                               @pages=@message=();
                        }
                        elsif ($state eq 'body') {
                                push @message, {line => $_},
@@ -693,6 +693,7 @@ sub cgi_signin ($$) { #{{{
                javascript => 0,
                params => $q,
                action => $q->request_uri,
+               template => (-e "$templatedir/signin.tmpl" ? "$templatedir/signin.tmpl" : "")
        );
        
        $form->sessionid($session->id);
@@ -745,13 +746,14 @@ sub cgi_signin ($$) { #{{{
        if ($form->submitted && $form->validate) {
                if ($form->submitted eq 'Login') {
                        $session->param("name", $form->field("name"));
-                       if (defined $form->field("do")) {
-                               $q->redirect(
+                       if (defined $form->field("do") && 
+                           $form->field("do") ne 'signin') {
+                               print $q->redirect(
                                        "$cgiurl?do=".$form->field("do").
                                        "&page=".$form->field("page"));
                        }
                        else {
-                               $q->redirect($url);
+                               print $q->redirect($url);
                        }
                }
                elsif ($form->submitted eq 'Register') {
@@ -777,23 +779,26 @@ sub cgi () { #{{{
        eval q{use CGI::Session};
        
        my $q=CGI->new;
-       # session id has to be _sessionid for CGI::FormBuilder to work.
-       # TODO: stop having the formbuilder emit cookies and change session
-       # id to something else.
-       CGI::Session->name("_sessionid");
-       my $session = CGI::Session->new(undef, $q,
-               { Directory=> "$srcdir/.ikiwiki/sessions" });
        
        my $do=$q->param('do');
        if (! defined $do || ! length $do) {
                error("\"do\" parameter missing");
        }
        
+       # This does not need a session.
        if ($do eq 'recentchanges') {
                cgi_recentchanges($q);
                return;
        }
        
+       # session id has to be _sessionid for CGI::FormBuilder to work.
+       # TODO: stop having the formbuilder emit cookies and change session
+       # id to something else.
+       CGI::Session->name("_sessionid");
+       my $session = CGI::Session->new(undef, $q,
+               { Directory=> "$srcdir/.ikiwiki/sessions" });
+       
+       # Everything below this point needs the user to be signed in.
        if ((! $anonok && ! defined $session->param("name")) || $do eq 'signin') {
                cgi_signin($q, $session);
                return;