X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fprefs.php;h=f66068270772e03b193233cb0000a567816cc290;hb=a1e937bbfe3d55c11865a292dca087972231e226;hp=3d3033b8105337153d978aa680bf94fa7084aa51;hpb=311339a06ba650d5491b5fda98d1eca20827d4d2;p=squirrelmail.git diff --git a/functions/prefs.php b/functions/prefs.php index 3d3033b8..f6606827 100644 --- a/functions/prefs.php +++ b/functions/prefs.php @@ -3,7 +3,7 @@ /** * prefs.php * - * Copyright (c) 1999-2001 The SquirrelMail Development Team + * Copyright (c) 1999-2002 The SquirrelMail Project Team * Licensed under the GNU GPL. For full terms see the file COPYING. * * This contains functions for manipulating user preferences @@ -12,7 +12,11 @@ */ global $prefs_are_cached, $prefs_cache; -if (!session_is_registered('prefs_are_cached')) { + +if ( !session_is_registered('prefs_are_cached') || + !isset( $prefs_cache) || + !is_array( $prefs_cache) || + substr( phpversion(), 0, 3 ) == '4.1' ) { $prefs_are_cached = false; $prefs_cache = array(); } @@ -26,11 +30,20 @@ function cachePrefValues($data_dir, $username) { if ($prefs_are_cached) { return; } - + + session_unregister('prefs_cache'); + session_unregister('prefs_are_cached'); + + /* Calculate the filename for the user's preference file */ $filename = getHashedFile($username, $data_dir, "$username.pref"); + /* A call to checkForPrefs here should take eliminate the need for */ + /* this to be called throughout the rest of the SquirrelMail code. */ + checkForPrefs($data_dir, $username, $filename); + + /* Make sure that the preference file now DOES exist. */ if (!file_exists($filename)) { - printf (_("Preference file, %s, does not exist. Log out, and log back in to create a default preference file."), $filename); + echo sprintf (_("Preference file, %s, does not exist. Log out, and log back in to create a default preference file."), $filename) . "
\n"; exit; } @@ -56,11 +69,9 @@ function cachePrefValues($data_dir, $username) { } fclose($file); - session_unregister('prefs_cache'); + $prefs_are_cached = true; + session_register('prefs_cache'); - - $prefs_are_cached = true; - session_unregister('prefs_are_cached'); session_register('prefs_are_cached'); } @@ -137,11 +148,32 @@ function setPref($data_dir, $username, $string, $value) { /** * Check for a preferences file. If one can not be found, create it. */ -function checkForPrefs($data_dir, $username) { - $filename = getHashedFile($username, $data_dir, "$username.pref"); - if (!file_exists($filename) ) { - if (!copy($data_dir . 'default_pref', $filename)) { - echo _("Error opening ") . $filename; +function checkForPrefs($data_dir, $username, $filename = '') { + /* First, make sure we have the filename. */ + if ($filename == '') { + $filename = getHashedFile($username, $data_dir, '$username.pref'); + } + + /* Then, check if the file exists. */ + if (!@file_exists($filename) ) { + /* First, check the $data_dir for the default preference file. */ + $default_pref = $data_dir . 'default_pref'; + + /* If it is not there, check the internal data directory. */ + if (!@file_exists($default_pref)) { + $default_pref = '../data/default_pref'; + } + + /* Otherwise, report an error. */ + if (!file_exists($default_pref)) { + echo _("Error opening ") . $default_pref . "
\n"; + echo _("Default preference file not found!") . "
\n"; + echo _("Please contact your system administrator and report this error.") . "
\n"; + exit; + } else if (!@copy($default_pref, $filename)) { + echo _("Error opening ") . $default_pref . '
'; + echo _("Could not create initial preference file!") . "
\n"; + echo _("Please contact your system administrator and report this error.") . "
\n"; exit; } } @@ -192,9 +224,9 @@ function getHashedFile($username, $dir, $datafile, $hash_search = true) { $result = "$real_hash_dir/$datafile"; /* Check for this file in the real hash directory. */ - if ($hash_search && !file_exists($result)) { + if ($hash_search && !@file_exists($result)) { /* First check the base directory, the most common location. */ - if (file_exists("$dir/$datafile")) { + if (@file_exists("$dir/$datafile")) { rename("$dir/$datafile", $result); /* Then check the full range of possible hash directories. */ @@ -217,6 +249,11 @@ function getHashedFile($username, $dir, $datafile, $hash_search = true) { function getHashedDir($username, $dir, $hash_dirs = '') { global $dir_hash_level; + /* Remove trailing slash from $dir if found */ + if (substr($dir, -1) == '/') { + $dir = substr($dir, 0, strlen($dir) - 1); + } + /* If necessary, populate the hash dir variable. */ if ($hash_dirs == '') { $hash_dirs = computeHashDirs($username); @@ -226,8 +263,13 @@ function getHashedDir($username, $dir, $hash_dirs = '') { $real_hash_dir = $dir; for ($h = 0; $h < $dir_hash_level; ++$h) { $real_hash_dir .= '/' . $hash_dirs[$h]; - if (!is_dir($real_hash_dir)) { - mkdir($real_hash_dir, 0770); + if (!@is_dir($real_hash_dir)) { + if (!@mkdir($real_hash_dir, 0770)) { + echo sprintf(_("Error creating directory %s."), $real_hash_dir) . '
'; + echo _("Could not create hashed directory structure!") . "
\n"; + echo _("Please contact your system administrator and report this error.") . "
\n"; + exit; + } } }