/**
* SquirrelMail configtest script
*
- * @copyright © 2003-2007 The SquirrelMail Project Team
+ * @copyright 2003-2010 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
// This script could really use some restructuring as it has grown quite rapidly
// but is not very 'clean'. Feel free to get some structure into this thing.
-/** force verbose error reporting and turn on display of errors */
+// force verbose error reporting and turn on display of errors, but not before
+// getting their original values
+$php_display_errors_original_value = ini_get('display_errors');
+$php_error_reporting_original_value = ini_get('error_reporting');
error_reporting(E_ALL);
ini_set('display_errors',1);
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]);
echo $IND . 'PHP version ' . PHP_VERSION . ' OK. (You have: ' . phpversion() . ". Minimum: 4.1.0)<br />\n";
-echo $IND . 'display_errors: ' . ini_get('display_errors') . "<br />\n";
-
-echo $IND . 'error_reporting: ' . ini_get('error_reporting') . "<br />\n";
+// try to determine information about the user and group the web server is running as
+//
+$webOwnerID = 'N/A';
+$webOwnerInfo = array('name' => 'N/A');
+if (function_exists('posix_getuid'))
+ $webOwnerID = posix_getuid();
+if ($webOwnerID === FALSE)
+ $webOwnerID = 'N/A';
+if ($webOwnerID !== 'N/A' && function_exists('posix_getpwuid'))
+ $webOwnerInfo = posix_getpwuid($webOwnerID);
+if (!$webOwnerInfo)
+ $webOwnerInfo = array('name' => 'N/A');
+$webGroupID = 'N/A';
+$webGroupInfo = array('name' => 'N/A');
+if (function_exists('posix_getgid'))
+ $webGroupID = posix_getgid();
+if ($webGroupID === FALSE)
+ $webGroupID = 'N/A';
+if ($webGroupID !== 'N/A' && function_exists('posix_getgrgid'))
+ $webGroupInfo = posix_getgrgid($webGroupID);
+if (!$webGroupInfo)
+ $webGroupInfo = array('name' => 'N/A');
+
+echo $IND . 'Running as ' . $webOwnerInfo['name'] . '(' . $webOwnerID
+ . ') / ' . $webGroupInfo['name'] . '(' . $webGroupID . ")<br />\n";
+
+echo $IND . 'display_errors: ' . $php_display_errors_original_value . " (overridden with 1 for this page only)<br />\n";
+
+echo $IND . 'error_reporting: ' . $php_error_reporting_original_value . " (overridden with 2047 for this page only)<br />\n";
$safe_mode = ini_get('safe_mode');
if ($safe_mode) {
+ //FIXME: should show that safe_mode is off when it is (this only shows the safe_mode setting when it's on) (also might be generally helpful to show things like open_basedir, too or even add phpinfo() output or a link to another script that has phpinfo()
echo $IND . 'safe_mode: ' . $safe_mode;
if (empty($prefs_dsn) || empty($addrbook_dsn))
echo ' (<font color="red">double check data and attachment directory ownership, etc!</font>)';
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'] . ")<br />\n";
+ //echo $IND . 'Web server is running as effective user: ' . $process_info['ename'] . ' (' . $process_info['euid'] . ")<br />\n";
+ echo $IND . 'Web server is running as group: ' . $process_info['group'] . ' (' . $process_info['gid'] . ")<br />\n";
+ //echo $IND . 'Web server is running as effective group: ' . $process_info['egroup'] . ' (' . $process_info['egid'] . ")<br />\n";
+}
+
+
/* checking paths */
echo "Checking paths...<br />\n";
}
}
// 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 . '<font color="red"><b>ERROR:</b></font> ' . $data_dir_error;
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.<br />\n";
}
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);
}
}
if ($use_smtp_tls===2) {
// if something breaks, script should close smtp connection on exit.
+
+ // format EHLO argument correctly if needed
+ //
+ if (preg_match('/^\d+\.\d+\.\d+\.\d+$/', $client_ip))
+ $helohost = '[' . $client_ip . ']';
+ else // some day might add IPv6 here
+ $helohost = $client_ip;
+
+
// say helo
- fwrite($stream,"EHLO $client_ip\r\n");
+ fwrite($stream,"EHLO $helohost\r\n");
$ehlo=array();
$ehlo_error = false;
/* 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');
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 ) {