X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=include%2Finit.php;h=d12b71d83dcaef6c42858ab46af8b79a5e63b73c;hb=da0135f62f730728c0c08c1ce5786c6332a366f2;hp=1f107726737d51243249fd7bab86f1a072ebe99f;hpb=d43a862e7cc7f6a51c4882457a684ef885efaf53;p=squirrelmail.git diff --git a/include/init.php b/include/init.php index 1f107726..d12b71d8 100644 --- a/include/init.php +++ b/include/init.php @@ -14,8 +14,10 @@ /** * This is a development version so in order to track programmer mistakes we * set the error reporting to E_ALL +FIXME: disabling this for now, because we now have $sm_debug_mode, but the problem with that is that we don't know what it will be until we have loaded the config file, a good 175 lines below after several important files have been included, etc. For now, we'll trust that developers have turned on E_ALL in php.ini anyway, but this can be uncommented if not. */ -error_reporting(E_ALL); +//error_reporting(E_ALL); + /** @@ -148,6 +150,7 @@ $color[14] = '#ff0000'; /* (red) Color for quoted text -- >> 2 or more $color[15] = '#002266'; /* (dark blue) Unselectable folders */ $color[16] = '#ff9933'; /* (orange) Highlight color */ +require(SM_PATH . 'include/constants.php'); require(SM_PATH . 'functions/global.php'); require(SM_PATH . 'functions/strings.php'); require(SM_PATH . 'functions/arrays.php'); @@ -169,8 +172,22 @@ if (file_exists(SM_PATH . 'config/config_local.php')) { require(SM_PATH . 'config/config_local.php'); } + +/** + * Set PHP error reporting level based on the SquirrelMail debug mode + */ +$error_level = 0; +if ($sm_debug_mode & SM_DEBUG_MODE_SIMPLE) + $error_level |= E_ERROR; +if ($sm_debug_mode & SM_DEBUG_MODE_MODERATE + || $sm_debug_mode & SM_DEBUG_MODE_ADVANCED) + $error_level |= E_ALL; +if ($sm_debug_mode & SM_DEBUG_MODE_STRICT) + $error_level |= E_STRICT; +error_reporting($error_level); + + require(SM_PATH . 'functions/plugin.php'); -require(SM_PATH . 'include/constants.php'); require(SM_PATH . 'include/languages.php'); require(SM_PATH . 'class/template/Template.class.php'); require(SM_PATH . 'class/error.class.php'); @@ -251,6 +268,51 @@ if (PAGE_NAME == 'login') { if (!empty($_SESSION)) $_SESSION = array(); + /** + * Allow administrators to define custom session handlers + * for SquirrelMail without needing to change anything in + * php.ini (application-level). + * + * In config_local.php, admin needs to put: + * + * $custom_session_handlers = array( + * 'my_open_handler', + * 'my_close_handler', + * 'my_read_handler', + * 'my_write_handler', + * 'my_destroy_handler', + * 'my_gc_handler', + * ); + * session_module_name('user'); + * session_set_save_handler( + * $custom_session_handlers[0], + * $custom_session_handlers[1], + * $custom_session_handlers[2], + * $custom_session_handlers[3], + * $custom_session_handlers[4], + * $custom_session_handlers[5] + * ); + * + * We need to replicate that code once here because PHP has + * long had a bug that resets the session handler mechanism + * when the session data is also destroyed. Because of this + * bug, even administrators who define custom session handlers + * via a PHP pre-load defined in php.ini (auto_prepend_file) + * will still need to define the $custom_session_handlers array + * in config_local.php. + */ + global $custom_session_handlers; + if (!empty($custom_session_handlers)) { + $open = $custom_session_handlers[0]; + $close = $custom_session_handlers[1]; + $read = $custom_session_handlers[2]; + $write = $custom_session_handlers[3]; + $destroy = $custom_session_handlers[4]; + $gc = $custom_session_handlers[5]; + session_module_name('user'); + session_set_save_handler($open, $close, $read, $write, $destroy, $gc); + } + sqsession_is_active(); session_regenerate_id(); @@ -329,7 +391,8 @@ do_hook('config_override', $null); * * Code can be utilized when session is started, but data is not loaded. * We have already loaded configuration and other important vars. Can't - * clean session globals here. + * clean session globals here, beside, the cleanout of globals at the + * top of this file will have removed anything this code would find anyway. if ((bool) @ini_get('register_globals') && strtolower(ini_get('register_globals'))!='off') { foreach ($_SESSION as $key => $value) { @@ -349,7 +412,7 @@ if (! sqgetGlobalVar('squirrelmail_language',$squirrelmail_language,SQ_COOKIE)) /** - * Do something special for some pages. This is based on the PAGE_NAME constand + * Do something special for some pages. This is based on the PAGE_NAME constant * set at the top of every page. */ switch (PAGE_NAME) { @@ -385,6 +448,10 @@ switch (PAGE_NAME) { session_write_close(); break; + case 'mailto': + // nothing to do + break; + case 'redirect': require(SM_PATH . 'functions/auth.php'); //nobreak; @@ -486,8 +553,6 @@ switch (PAGE_NAME) { exit; } -//FIXME: remove next line if the placement of the copy of this line above does not prove to be problematic - sqgetGlobalVar('username',$username,SQ_SESSION); sqgetGlobalVar('authz',$authz,SQ_SESSION); /** @@ -529,12 +594,9 @@ switch (PAGE_NAME) { // Japanese translation used without mbstring support if ($err==2) { - $sError = - "

You need to have PHP installed with the multibyte string function \n". - "enabled (using configure option --enable-mbstring).

\n". - "

System assumed that you accidently switched to Japanese translation \n". - "and reverted your language preference to English.

\n". - "

Please refresh this page in order to use webmail.

\n"; + $sError = "

Your administrator needs to have PHP installed with the multibyte string extension enabled (using configure option --enable-mbstring).

\n" + . "

This system has assumed that you accidently switched to Japanese and has reverted your language preference to English.

\n" + . "

Please refresh this page in order to continue using your webmail.

\n"; error_box($sError); } @@ -605,6 +667,7 @@ if (empty($oTemplate)) { } // We want some variables to always be available to the template +// $oTemplate->assign('javascript_on', (sqGetGlobalVar('user_is_logged_in', $user_is_logged_in, SQ_SESSION) ? checkForJavascript() : 0)); @@ -614,6 +677,11 @@ foreach ($always_include as $var) { $oTemplate->assign($var, (isset($$var) ? $$var : NULL)); } +// A few output elements are used often, so just get them once here +// +$nbsp = $oTemplate->fetch('non_breaking_space.tpl'); +$br = $oTemplate->fetch('line_break.tpl'); + /** * Initialize our custom error handler object */ @@ -628,6 +696,12 @@ if (version_compare(PHP_VERSION, "4.3.0", ">=")) { $oldErrorHandler = set_error_handler('SquirrelMailErrorhandler'); } + +// ============================================================================ +// ================= End of Live Code, Beginning of Functions ================= +// ============================================================================ + + /** * Javascript support detection function * @param boolean $reset recheck javascript support if set to true.