session improvements

master
joey 2006-11-26 19:43:50 +00:00
parent 3a31030550
commit d99ce1f9ad
1 changed files with 28 additions and 13 deletions

View File

@ -168,6 +168,7 @@ sub cgi_postsignin ($$) { #{{{
my $postsignin=CGI->new($session->param("postsignin")); my $postsignin=CGI->new($session->param("postsignin"));
$session->clear("postsignin"); $session->clear("postsignin");
cgi($postsignin, $session); cgi($postsignin, $session);
cgi_savesession($session);
exit; exit;
} }
else { else {
@ -523,12 +524,35 @@ sub cgi_editpage ($$) { #{{{
} }
} #}}} } #}}}
sub cgi_getsession ($) { #{{{
my $q=shift;
eval q{use CGI::Session};
CGI::Session->name("ikiwiki_session_".encode_utf8($config{wikiname}));
my $oldmask=umask(077);
my $session = CGI::Session->new("driver:DB_File", $q,
{ FileName => "$config{wikistatedir}/sessions.db" });
umask($oldmask);
return $session;
} #}}}
sub cgi_savesession ($) { #{{{
my $session=shift;
# Force session flush with safe umask.
my $oldmask=umask(077);
$session->flush;
umask($oldmask);
}
sub cgi (;$$) { #{{{ sub cgi (;$$) { #{{{
my $q=shift; my $q=shift;
my $session=shift; my $session=shift;
if (! $q) { if (! $q) {
eval q{use CGI; use CGI::Session}; eval q{use CGI};
error($@) if $@; error($@) if $@;
$q=CGI->new; $q=CGI->new;
@ -560,12 +584,7 @@ sub cgi (;$$) { #{{{
lockwiki(); lockwiki();
if (! $session) { if (! $session) {
CGI::Session->name("ikiwiki_session_".encode_utf8($config{wikiname})); $session=cgi_getsession($q);
my $oldmask=umask(077);
$session = CGI::Session->new("driver:DB_File", $q,
{ FileName => "$config{wikistatedir}/sessions.db" });
umask($oldmask);
} }
# Auth hooks can sign a user in. # Auth hooks can sign a user in.
@ -595,12 +614,7 @@ sub cgi (;$$) { #{{{
$session->param(postsignin => $ENV{QUERY_STRING}); $session->param(postsignin => $ENV{QUERY_STRING});
} }
cgi_signin($q, $session); cgi_signin($q, $session);
cgi_savesession($session);
# Force session flush with safe umask.
my $oldmask=umask(077);
$session->flush;
umask($oldmask);
return; return;
} }
elsif (defined $session->param("postsignin")) { elsif (defined $session->param("postsignin")) {
@ -611,6 +625,7 @@ sub cgi (;$$) { #{{{
print $q->header(-status => "403 Forbidden"); print $q->header(-status => "403 Forbidden");
$session->delete(); $session->delete();
print "You are banned."; print "You are banned.";
cgi_savesession($session);
exit; exit;
} }