X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=include%2Finit.php;h=a6eb383b5db0500b9c6200c100b568b0404baa88;hp=5586ff197bab6caa5f0f56b08feff163e473e1c4;hb=209e24bb063cb116e8564e226e0a2687276cb9d5;hpb=8e530924279d64d4fda7263d18846c678fc308f3 diff --git a/include/init.php b/include/init.php index 5586ff19..a6eb383b 100644 --- a/include/init.php +++ b/include/init.php @@ -61,11 +61,18 @@ if ((bool) ini_get('register_globals') && unset($GLOBALS['value']); } +/** + * Used as a dummy value, e.g., for passing as an empty + * hook argument. + */ +global $null; +$null = NULL; + /** * [#1518885] session.use_cookies = off breaks SquirrelMail * - * When session cookies are not used, all http redirects, meta refreshes, - * src/download.php and javascript URLs are broken. Setting must be set + * When session cookies are not used, all http redirects, meta refreshes, + * src/download.php and javascript URLs are broken. Setting must be set * before session is started. */ if (!(bool)ini_get('session.use_cookies') || @@ -157,6 +164,7 @@ 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'); /** * If magic_quotes_runtime is on, SquirrelMail breaks in new and creative ways. @@ -195,6 +203,7 @@ if (!isset($session_name) || !$session_name) { * if session.auto_start is On then close the session */ $sSessionAutostartName = session_name(); +$sCookiePath = null; if ((isset($sSessionAutostartName) || $sSessionAutostartName == '') && $sSessionAutostartName !== $session_name) { $sCookiePath = ini_get('session.cookie_path'); @@ -214,27 +223,10 @@ ini_set('session.name' , $session_name); session_set_cookie_params (0, $base_uri); sqsession_is_active(); -/** - * DISABLED. - * Remove globalized session data in rg=on setups - * - * 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. -if ((bool) @ini_get('register_globals') && - strtolower(ini_get('register_globals'))!='off') { - foreach ($_SESSION as $key => $value) { - unset($GLOBALS[$key]); - } -} -*/ - -sqsession_register(SM_BASE_URI,'base_uri'); - /** * SquirrelMail version number -- DO NOT CHANGE */ -$version = '1.5.2 [CVS]'; +$version = '1.5.2 [SVN]'; /** * SquirrelMail internal version number -- DO NOT CHANGE @@ -242,51 +234,80 @@ $version = '1.5.2 [CVS]'; */ $SQM_INTERNAL_VERSION = array(1,5,2); -/** - * Retrieve the language cookie + +/* if plugins are disabled only for one user and + * the current user is NOT that user, turn them + * back on */ -if (! sqgetGlobalVar('squirrelmail_language',$squirrelmail_language,SQ_COOKIE)) { - $squirrelmail_language = ''; +sqgetGlobalVar('username',$username,SQ_SESSION); +if ($disable_plugins && !empty($disable_plugins_user) + && $username != $disable_plugins_user) { + $disable_plugins = false; } - -/** - * @var $sInitlocation From where do we include. - */ -if (!isset($sInitLocation)) { - $sInitLocation=NULL; +/* remove all plugins if they are disabled */ +if ($disable_plugins) { + $plugins = array(); } -/** - * MAIN PLUGIN LOADING CODE HERE - */ /** * Include Compatibility plugin if available. */ -if (file_exists(SM_PATH . 'plugins/compatibility/functions.php')) +if (!$disable_plugins && file_exists(SM_PATH . 'plugins/compatibility/functions.php')) include_once(SM_PATH . 'plugins/compatibility/functions.php'); -$squirrelmail_plugin_hooks = array(); /** - * On init, we no longer need to load all plugin setup files. + * MAIN PLUGIN LOADING CODE HERE + * On init, we no longer need to load all plugin setup files. * Now, we load the statically generated hook registrations here * and let the hook calls include only the plugins needed. */ -if (file_exists(SM_PATH . 'config/plugin_hooks.php')) { +$squirrelmail_plugin_hooks = array(); +if (!$disable_plugins && file_exists(SM_PATH . 'config/plugin_hooks.php')) { require(SM_PATH . 'config/plugin_hooks.php'); } /** - * Before 1.5.2 version hook was part of functions/constants.php. - * After init layout changes, hook had to be moved because include/constants.php is - * loaded before plugins are initialized. - * @since 1.2.0 + * allow plugins to override main configuration; hook is placed + * here to allow plugins to use session information to do their work + */ +do_hook('config_override', $null); + +/** + * DISABLED. + * Remove globalized session data in rg=on setups + * + * 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. +if ((bool) @ini_get('register_globals') && + strtolower(ini_get('register_globals'))!='off') { + foreach ($_SESSION as $key => $value) { + unset($GLOBALS[$key]); + } +} +*/ + +sqsession_register(SM_BASE_URI,'base_uri'); + +/** + * Retrieve the language cookie */ -do_hook('loading_constants'); +if (! sqgetGlobalVar('squirrelmail_language',$squirrelmail_language,SQ_COOKIE)) { + $squirrelmail_language = ''; +} + + +/** + * @var $sInitlocation From where do we include. + */ +if (!isset($sInitLocation)) { + $sInitLocation=NULL; +} switch ($sInitLocation) { - case 'style': + case 'style': // need to get the right template set up // @@ -316,7 +337,6 @@ switch ($sInitLocation) { } session_write_close(); - sqsetcookieflush(); break; case 'redirect': @@ -327,7 +347,7 @@ switch ($sInitLocation) { require(SM_PATH . 'functions/prefs.php'); require(SM_PATH . 'functions/auth.php'); /* hook loads custom prefs backend plugins */ - $prefs_backend = do_hook_function('prefs_backend'); + $prefs_backend = do_hook('prefs_backend', $null); if (isset($prefs_backend) && !empty($prefs_backend) && file_exists(SM_PATH . $prefs_backend)) { require(SM_PATH . $prefs_backend); } elseif (isset($prefs_dsn) && !empty($prefs_dsn)) { @@ -368,7 +388,9 @@ switch ($sInitLocation) { * because they probably belong to other php apps */ if (ini_get('session.name') !== $sSessionAutostartName) { - sqsetcookie(ini_get('session.name'),'',0,$sCookiePath); + // This does not work. Sometimes the cookie with SQSESSID=deleted and path / + // is picked up in webmail.php => login will fail + //sqsetcookie(ini_get('session.name'),'',0,$sCookiePath); } } break; @@ -407,8 +429,8 @@ switch ($sInitLocation) { * Initialize the template object (logout_error uses it) */ /* - * $sTemplateID is not initialized when a user is not logged in, so we - * will use the config file defaults here. If the neccesary variables + * $sTemplateID is not initialized when a user is not logged in, so we + * will use the config file defaults here. If the neccesary variables * are net set, force a default value. */ $sTemplateID = Template::get_default_template_set(); @@ -419,6 +441,7 @@ switch ($sInitLocation) { 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); @@ -438,7 +461,7 @@ switch ($sInitLocation) { /* see 'redirect' case */ require(SM_PATH . 'functions/prefs.php'); - $prefs_backend = do_hook_function('prefs_backend'); + $prefs_backend = do_hook('prefs_backend', $null); if (isset($prefs_backend) && !empty($prefs_backend) && file_exists(SM_PATH . $prefs_backend)) { require(SM_PATH . $prefs_backend); } elseif (isset($prefs_dsn) && !empty($prefs_dsn)) { @@ -470,8 +493,6 @@ switch ($sInitLocation) { * Set up the language. */ $err=set_up_language(getPref($data_dir, $username, 'language')); - /* this is the last cookie we set so flush it. */ - sqsetcookieflush(); // Japanese translation used without mbstring support if ($err==2) { @@ -525,18 +546,18 @@ switch ($sInitLocation) { } else { // interface runs on server's time zone. Remove php E_STRICT complains $default_timezone = @date_default_timezone_get(); - date_default_timezone_set($default_timezone); + date_default_timezone_set($default_timezone); } } break; } /* - * $sTemplateID is not initialized when a user is not logged in, so we - * will use the config file defaults here. If the neccesary variables + * $sTemplateID is not initialized when a user is not logged in, so we + * will use the config file defaults here. If the neccesary variables * are not set, force a default value. - * - * If the user is logged in, $sTemplateID will be set in load_prefs.php, + * + * If the user is logged in, $sTemplateID will be set in load_prefs.php, * so we shouldn't change it here. */ if (!isset($sTemplateID)) { @@ -551,7 +572,9 @@ if (empty($oTemplate)) { } // We want some variables to always be available to the template -$always_include = array('sTemplateID', 'icon_theme_path', 'javascript_on'); +$oTemplate->assign('javascript_on', checkForJavascript()); +$oTemplate->assign('base_uri', sqm_baseuri()); +$always_include = array('sTemplateID', 'icon_theme_path'); foreach ($always_include as $var) { $oTemplate->assign($var, (isset($$var) ? $$var : NULL)); } @@ -559,7 +582,6 @@ foreach ($always_include as $var) { /** * Initialize our custom error handler object */ -require(SM_PATH . 'class/error.class.php'); $oErrorHandler = new ErrorHandler($oTemplate,'error_message.tpl'); /** @@ -583,7 +605,12 @@ function checkForJavascript($reset = FALSE) { if ( !$reset && sqGetGlobalVar('javascript_on', $javascript_on, SQ_SESSION) ) return $javascript_on; - if ( $reset || !isset($javascript_setting) ) + if ( ( $reset || !isset($javascript_setting) ) + // getPref() not defined (nor is it meaningful) when user not + // logged in, but that begs the question if $javascript_on is + // not in the session in that case, where do we get it from? + && ( sqGetGlobalVar('user_is_logged_in', $user_is_logged_in, SQ_SESSION) + && $user_is_logged_in) ) $javascript_setting = getPref($data_dir, $username, 'javascript_setting', SMPREF_JS_AUTODETECT); if ( !sqGetGlobalVar('new_js_autodetect_results', $js_autodetect_results) &&