Forwardporting safer abook/prefs saving from stable
authorkink <kink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Mon, 14 Oct 2002 22:02:46 +0000 (22:02 +0000)
committerkink <kink@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Mon, 14 Oct 2002 22:02:46 +0000 (22:02 +0000)
git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@3849 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/abook_local_file.php
functions/file_prefs.php

index 9f7acf7a5bfaa2565bab00b86ecd1244c15cfc25..ca6119324ee1d2d844ac176caff591fb76a7488e 100644 (file)
@@ -135,9 +135,9 @@ class abook_local_file extends addressbook_backend {
      * NOTE! Previous locks are broken by this function */
     function overwrite(&$rows) {
         $this->unlock();
-        $newfh = @fopen($this->filename, 'w');
+        $newfh = @fopen($this->filename .'.tmp', 'w');
         if(!$newfh) {
-            return $this->set_error("$file: " . _("Open failed"));
+            return $this->set_error($this->filename .'.tmp: '. _("Open failed"));
         }
         
         for($i = 0 ; $i < sizeof($rows) ; $i++) {
@@ -150,6 +150,8 @@ class abook_local_file extends addressbook_backend {
         }       
 
         fclose($newfh);
+        copy( $this->filename .'.tmp' , $this->filename);
+        unlink( $this->filename .'.tmp');
         $this->unlock();
         $this->open(true);
         return true;
@@ -376,4 +378,4 @@ class abook_local_file extends addressbook_backend {
     }
 
 } /* End of class abook_local_file */
-?>
\ No newline at end of file
+?>
index 073b366a30a3ddfb942ee8ac6e898db0971c168f..8dacc32af1422d4e54f352877b9a0d20b4cbb736 100644 (file)
@@ -106,10 +106,10 @@ function savePrefValues($data_dir, $username) {
     $filename = getHashedFile($username, $data_dir, "$username.pref");
 
     /* Open the file for writing, or else display an error to the user. */
-    if(!$file = @fopen($filename, 'w'))
+    if(!$file = @fopen($filename.'.tmp', 'w'))
     {
         include_once(SM_PATH . 'functions/display_messages.php');
-        logout_error( sprintf( _("Preference file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename) );
+        logout_error( sprintf( _("Preference file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename.'.tmp') );
         exit;
     }
 
@@ -119,6 +119,8 @@ function savePrefValues($data_dir, $username) {
         }
     }
     fclose($file);
+    copy($filename.'.tmp', $filename);
+    unlink($filename.'.tmp');
     chmod($filename, 0600);
 }
 
@@ -208,14 +210,16 @@ function checkForPrefs($data_dir, $username, $filename = '') {
 function setSig($data_dir, $username, $number, $value) {
     $filename = getHashedFile($username, $data_dir, "$username.si$number");
     /* Open the file for writing, or else display an error to the user. */
-    if(!$file = @fopen($filename, 'w'))
+    if(!$file = @fopen($filename.'.tmp', 'w'))
     {
         include_once(SM_PATH . '/functions/display_messages.php' );
-        logout_error( sprintf( _("Signature file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename) );
+        logout_error( sprintf( _("Signature file, %s, could not be opened. Contact your system administrator to resolve this issue."), $filename.'.tmp') );
         exit;
     }
     fwrite($file, $value);
     fclose($file);
+    copy($filename.'.tmp',$filename);
+    unlink($filename.'.tmp');
 }
 
 /**