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 ) {