X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=functions%2Fprefs.php;h=65a32de0b7cab1e3766282305406841c93bca739;hb=7fe88644e5436b6866b288442b28059bbe54b179;hp=ad32bf9149bb105c31dffbf5d97ec979f16a938c;hpb=165829a378d4e41c1a47b46be08fdbd20315077f;p=squirrelmail.git diff --git a/functions/prefs.php b/functions/prefs.php index ad32bf91..65a32de0 100644 --- a/functions/prefs.php +++ b/functions/prefs.php @@ -3,7 +3,7 @@ /** * prefs.php * - * Copyright (c) 1999-2002 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,10 @@ */ 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) ) { $prefs_are_cached = false; $prefs_cache = array(); } @@ -26,16 +29,20 @@ function cachePrefValues($data_dir, $username) { if ($prefs_are_cached) { return; } - - /* 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); - + + 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; } @@ -61,11 +68,8 @@ function cachePrefValues($data_dir, $username) { } fclose($file); - session_unregister('prefs_cache'); session_register('prefs_cache'); - $prefs_are_cached = true; - session_unregister('prefs_are_cached'); session_register('prefs_are_cached'); } @@ -142,11 +146,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; } } @@ -197,9 +222,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. */ @@ -222,6 +247,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); @@ -231,8 +261,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; + } } }