]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki/UserInfo.pm
* Make ikiwiki -verbose -setup with a setup file that enabled syslog logging
[ikiwiki.git] / IkiWiki / UserInfo.pm
index 115a263ce09481d073837f878aa64ab347019f11..99b3c9f0aba71b5f6f00f340c05fd8ce45d64998 100644 (file)
@@ -15,12 +15,19 @@ sub userinfo_retrieve () { #{{{
 sub userinfo_store ($) { #{{{
        my $userinfo=shift;
        
+       my $newfile="$config{wikistatedir}/userdb.new";
        my $oldmask=umask(077);
-       my $ret=Storable::lock_store($userinfo, "$config{wikistatedir}/userdb");
+       my $ret=Storable::lock_store($userinfo, $newfile);
        umask($oldmask);
+       if (defined $ret && $ret) {
+               if (! rename($newfile, "$config{wikistatedir}/userdb")) {
+                       unlink($newfile);
+                       $ret=undef;
+               }
+       }
        return $ret;
 } #}}}
-       
+
 sub userinfo_get ($$) { #{{{
        my $user=shift;
        my $field=shift;
@@ -150,8 +157,8 @@ sub send_commit_mails ($$$@) { #{{{
                # Daemonize, in case the mail sending takes a while.
                defined(my $pid = fork) or error("Can't fork: $!");
                return if $pid;
-               setsid() or error("Can't start a new session: $!");
                eval q{use POSIX 'setsid'};
+               setsid() or error("Can't start a new session: $!");
                chdir '/';
                open STDIN, '/dev/null';
                open STDOUT, '>/dev/null';