X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=src%2Fconfigtest.php;h=dcb22e5b9af0b3a0ca9cf14fb4a9305c9f0bc426;hp=99cfdb57edef0240722469824591a2de643a26df;hb=71911a21c5e0457ddd027d70efc16b8b1c411617;hpb=b00dce9befb0755283ff90d262b4f89db0b2b6e8 diff --git a/src/configtest.php b/src/configtest.php index 99cfdb57..dcb22e5b 100644 --- a/src/configtest.php +++ b/src/configtest.php @@ -87,6 +87,7 @@ define('SM_PATH', '../'); require(SM_PATH . 'include/constants.php'); require(SM_PATH . 'functions/global.php'); require(SM_PATH . 'functions/strings.php'); +require(SM_PATH . 'functions/files.php'); $SQM_INTERNAL_VERSION = explode('.', SM_VERSION, 3); $SQM_INTERNAL_VERSION[2] = intval($SQM_INTERNAL_VERSION[2]); @@ -116,6 +117,12 @@ if (file_exists(SM_PATH . 'config/config_local.php')) { require(SM_PATH . 'config/config_local.php'); } +/** + * Include Compatibility plugin if available. + */ +if (!$disable_plugins && file_exists(SM_PATH . 'plugins/compatibility/functions.php')) + include_once(SM_PATH . 'plugins/compatibility/functions.php'); + /** Load plugins */ global $disable_plugins; $squirrelmail_plugin_hooks = array(); @@ -313,6 +320,17 @@ if (ini_get('short_open_tag') == 0) { do_err($short_open_tag_warning, false); } + +/* check who the web server is running as if possible */ + +if ($process_info = get_process_owner_info()) { + echo $IND . 'Web server is running as user: ' . $process_info['name'] . ' (' . $process_info['uid'] . ")
\n"; + //echo $IND . 'Web server is running as effective user: ' . $process_info['ename'] . ' (' . $process_info['euid'] . ")
\n"; + echo $IND . 'Web server is running as group: ' . $process_info['group'] . ' (' . $process_info['gid'] . ")
\n"; + //echo $IND . 'Web server is running as effective group: ' . $process_info['egroup'] . ' (' . $process_info['egid'] . ")
\n"; +} + + /* checking paths */ echo "Checking paths...
\n"; @@ -336,7 +354,7 @@ if(!isset($data_dir_error) && !is_dir($data_dir)) { } } // datadir should be executable - but no clean way to test on that -if(!isset($data_dir_error) && !is_writable($data_dir)) { +if(!isset($data_dir_error) && !sq_is_writable($data_dir)) { if (!empty($prefs_dsn)) { $data_dir_error = "Data dir ($data_dir) is not writable!\n"; echo $IND . 'ERROR: ' . $data_dir_error; @@ -364,7 +382,7 @@ if($data_dir == $attachment_dir) { if (!is_dir($attachment_dir)) { do_err("Attachment dir ($attachment_dir) is not a directory!"); } - if (!is_writable($attachment_dir)) { + if (!sq_is_writable($attachment_dir)) { do_err("I cannot write to attachment dir ($attachment_dir)!"); } echo $IND . "Attachment dir OK.
\n"; @@ -411,27 +429,61 @@ if (isset($plugins[0])) { if(!file_exists(SM_PATH .'plugins/'.$plugin)) { do_err('You have enabled the '.$plugin.' plugin, but I cannot find it.', FALSE); } elseif (!is_readable(SM_PATH .'plugins/'.$plugin.'/setup.php')) { - do_err('You have enabled the '.$plugin.' plugin, but I cannot read its setup.php file.', FALSE); + do_err('You have enabled the '.$plugin.' plugin, but I cannot locate or read its setup.php file.', FALSE); } elseif (in_array($plugin, $bad_plugins)) { do_err('You have enabled the '.$plugin.' plugin, which causes problems with this version of SquirrelMail. Please check the ReleaseNotes or other documentation for more information.', false); } } + + // load plugin functions include_once(SM_PATH . 'functions/plugin.php'); + // turn on output buffering in order to prevent output of new lines ob_start(); foreach ($plugins as $name) { use_plugin($name); + + // get output and remove whitespace + $output = trim(ob_get_contents()); + + // if plugin outputs more than newlines and spacing, stop script execution. + if (!empty($output)) { + $plugin_load_error = 'Some output was produced when plugin ' . $name . ' was loaded. Usually this means there is an error in the plugin\'s setup or configuration file. The output was: '.htmlspecialchars($output); + do_err($plugin_load_error); + } } - // get output and remove whitespace - $output = trim(ob_get_contents()); ob_end_clean(); - // if plugins output more than newlines and spacing, stop script execution. - if (!empty($output)) { -//FIXME: if the output buffer is checked INSIDE the foreach loop above, we can tell the user WHICH plugin has the problem - seems like a good idea - $plugin_load_error = 'Some output is produced when plugins are loaded. Usually this means there is an error in one of the plugin setup or configuration files. The output was: '.htmlspecialchars($output); - do_err($plugin_load_error); + + + /** + * Check the contents of the static plugin hooks array file against + * the plugin setup file, which may have changed in an upgrade, etc. + * This helps remind admins to re-run the configuration utility when + * a plugin has been changed or upgraded. + */ + $static_squirrelmail_plugin_hooks = $squirrelmail_plugin_hooks; + $squirrelmail_plugin_hooks = array(); + foreach ($plugins as $name) { + $function = "squirrelmail_plugin_init_$name"; + if (function_exists($function)) { + $function(); + + // now iterate through each hook and make sure the + // plugin is registered on the correct ones in the + // static plugin configuration file + // + foreach ($squirrelmail_plugin_hooks as $hook_name => $hooked_plugins) + foreach ($hooked_plugins as $hooked_plugin => $hooked_function) + if ($hooked_plugin == $name + && (empty($static_squirrelmail_plugin_hooks[$hook_name][$hooked_plugin]) + || $static_squirrelmail_plugin_hooks[$hook_name][$hooked_plugin] != $hooked_function)) + do_err('The plugin ' . $name . ' is supposed to be registered on the ' . $hook_name . ' hook, but it is not. You need to re-run the configuration utility and re-save your configuration file.', FALSE); + } } + $squirrelmail_plugin_hooks = $static_squirrelmail_plugin_hooks; + + /** * Print plugin versions */ @@ -450,13 +502,21 @@ if (isset($plugins[0])) { } else if (is_array($failed_dependencies)) { $missing_plugins = ''; + $incompatible_plugins = ''; foreach ($failed_dependencies as $depend_name => $depend_requirements) { - $missing_plugins .= ', ' . $depend_name . ' (version ' . $depend_requirements['version'] . ', ' . ($depend_requirements['activate'] ? 'must be activated' : 'need not be activated') . ')'; + if ($depend_requirements['version'] == SQ_INCOMPATIBLE) + $incompatible_plugins .= ', ' . $depend_name; + else + $missing_plugins .= ', ' . $depend_name . ' (version ' . $depend_requirements['version'] . ', ' . ($depend_requirements['activate'] ? 'must be activated' : 'need not be activated') . ')'; } - do_err($name . ' is missing some dependencies: ' . trim($missing_plugins, ', '), FALSE); + $error_string = (!empty($incompatible_plugins) ? $name . ' cannot be activated at the same time as the following plugins: ' . trim($incompatible_plugins, ', ') : '') + . (!empty($missing_plugins) ? (!empty($incompatible_plugins) ? '. ' . $name . ' is also ' : $name . ' is ') . 'missing some dependencies: ' . trim($missing_plugins, ', ') : ''); + do_err($error_string, FALSE); } } + + /** * This hook was added in 1.5.2 and 1.4.10. Each plugins should print an error * message and return TRUE if there are any errors in its setup/configuration. @@ -612,15 +672,16 @@ if($useSendmail) { /* POP before SMTP */ if($pop_before_smtp) { - $stream = fsockopen($smtpServerAddress, 110, $err_no, $err_str); + if (empty($pop_before_smtp_host)) $pop_before_smtp_host = $smtpServerAddress; + $stream = fsockopen($pop_before_smtp_host, 110, $err_no, $err_str); if (!$stream) { - do_err("Error connecting to POP Server ($smtpServerAddress:110) " + do_err("Error connecting to POP Server ($pop_before_smtp_host:110) " . $err_no . ' : ' . htmlspecialchars($err_str)); } $tmp = fgets($stream, 1024); if (substr($tmp, 0, 3) != '+OK') { - do_err("Error connecting to POP Server ($smtpServerAddress:110)" + do_err("Error connecting to POP Server ($pop_before_smtp_host:110)" . ' '.htmlspecialchars($tmp)); } fputs($stream, 'QUIT'); @@ -917,7 +978,7 @@ if( empty($ldap_server) ) { if ( empty($param['binddn']) ) { $bind = @ldap_bind($linkid); } else { - $bind = @ldap_bind($param['binddn'], $param['bindpw']); + $bind = @ldap_bind($linkid, $param['binddn'], $param['bindpw']); } if ( $bind ) {