<?php
-/*
+/**
* SquirrelMail configtest script
*
* Copyright (c) 2003-2004 The SquirrelMail Project Team
* Licensed under the GNU GPL. For full terms see the file COPYING.
*
- * $Id$
+ * @version $Id$
+ * @package squirrelmail
+ * @subpackage config
*/
/************************************************************
************************************************************/
function do_err($str, $exit = TRUE) {
- echo '<p><font color="red"><b>ERROR:</b></font> ' .$str. "</p>\n";
+ global $IND;
+ echo '<p>'.$IND.'<font color="red"><b>ERROR:</b></font> ' .$str. "</p>\n";
if($exit) {
echo '</body></html>';
exit;
$IND = str_repeat(' ',4);
ob_implicit_flush();
+/** @ignore */
define('SM_PATH', '../');
/*
<p>This script will try to check some aspects of your SquirrelMail configuration
and point you to errors whereever it can find them. You need to go run <tt>conf.pl</tt>
-in this directory first before you run this script.</p>
+in the <tt>config/</tt> directory first before you run this script.</p>
<?php
echo "Checking PHP configuration...<br />\n";
-if(!check_php_version(4,0,6)) {
- do_err('Insufficient PHP version: '. PHP_VERSION . '! Minimum required: 4.0.6');
+if(!check_php_version(4,1,0)) {
+ do_err('Insufficient PHP version: '. PHP_VERSION . '! Minimum required: 4.1.0');
}
echo $IND . 'PHP version '.PHP_VERSION.' OK.<br />';
if (!is_dir($attachment_dir)) {
do_err("Attachment dir ($attachment_dir) is not a directory!");
}
- if (!is_readable($attachment_dir)) {
- do_err("I cannot read from attachment dir ($attachment_dir)!");
- }
if (!is_writable($attachment_dir)) {
do_err("I cannot write to attachment dir ($attachment_dir)!");
}
$errorNumber, $errorString);
if(!$stream) {
do_err("Error connecting to SMTP server \"$smtpServerAddress:$smtpPort\".".
- "Server error: ($errorNumber) $errorString");
+ "Server error: ($errorNumber) ".htmlspecialchars($errorString));
}
// check for SMTP code; should be 2xx to allow us access
$smtpline = fgets($stream, 1024);
if(((int) $smtpline{0}) > 3) {
- do_err("Error connecting to SMTP server. Server error: ".$smtpline);
+ do_err("Error connecting to SMTP server. Server error: ".
+ htmlspecialchars($smtpline));
}
fputs($stream, 'QUIT');
fclose($stream);
- echo $IND . 'SMTP server OK (<tt><small>'.trim($smtpline)."</small></tt>)<br />\n";
+ echo $IND . 'SMTP server OK (<tt><small>'.
+ trim(htmlspecialchars($smtpline))."</small></tt>)<br />\n";
/* POP before SMTP */
if($pop_before_smtp) {
$stream = fsockopen($smtpServerAddress, 110, $err_no, $err_str);
if (!$stream) {
- do_err("Error connecting to POP Server ($smtpServerAddress:110)"
- . " $err_no : $err_str");
+ do_err("Error connecting to POP Server ($smtpServerAddress: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)"
- . ' '.$tmp);
+ . ' '.htmlspecialchars($tmp));
}
fputs($stream, 'QUIT');
fclose($stream);
$errorNumber, $errorString);
if(!$stream) {
do_err("Error connecting to IMAP server \"$imapServerAddress:$imapPort\".".
- "Server error: ($errorNumber) $errorString");
+ "Server error: ($errorNumber) ".
+ htmlspecialchars($errorString));
}
$imapline = fgets($stream, 1024);
if(substr($imapline, 0,4) != '* OK') {
- do_err('Error connecting to IMAP server. Server error: '.$imapline);
+ do_err('Error connecting to IMAP server. Server error: '.
+ htmlspecialchars($imapline));
}
fputs($stream, '001 LOGOUT');
fclose($stream);
-echo $IND . 'IMAP server OK (<tt><small>'.trim($imapline)."</small></tt>)<br />\n";
+echo $IND . 'IMAP server OK (<tt><small>'.
+ htmlspecialchars(trim($imapline))."</small></tt>)<br />\n";
-// other possible checks:
-// ? prefs/abook DSN
-// ? locale/gettext
-// ? actually start a session to see if it works
-// ? ...
+echo "Checking internationalization (i18n) settings:<br />\n";
+echo "$IND gettext - ";
+if (function_exists('gettext')) {
+ echo "Gettext functions are available. You must have appropriate system locales compiled.<br />\n";
+} else {
+ echo "Gettext functions are unavailable. SquirrelMail will use slower internal gettext functions.<br />\n";
+}
+echo "$IND mbstring - ";
+if (function_exists('mb_detect_encoding')) {
+ echo "Mbstring functions are available.<br />\n";
+} else {
+ echo "Mbstring functions are unavailable. Japanese translation won't work.<br />\n";
+}
+echo "$IND recode - ";
+if (function_exists('recode')) {
+ echo "Recode functions are available.<br />\n";
+} elseif ($use_php_recode) {
+ echo "Recode functions are unavailable.<br />\n";
+ do_err('Your configuration requires recode support, but recode support is missing.');
+} else {
+ echo "Recode functions are unavailable.<br />\n";
+}
+echo "$IND iconv - ";
+if (function_exists('iconv')) {
+ echo "Iconv functions are available.<br />\n";
+} elseif ($use_php_iconv) {
+ echo "Iconv functions are unavailable.<br />\n";
+ do_err('Your configuration requires iconv support, but iconv support is missing.');
+} else {
+ echo "Iconv functions are unavailable.<br />\n";
+}
+// same test as in include/validate.php
+echo "$IND timezone - ";
+if ( (!ini_get('safe_mode')) ||
+ !strcmp(ini_get('safe_mode_allowed_env_vars'),'') ||
+ preg_match('/^([\w_]+,)*TZ/', ini_get('safe_mode_allowed_env_vars')) ) {
+ echo "Webmail users can change their time zone settings.<br />\n";
+} else {
+ echo "Webmail users can't change their time zone settings.<br />\n";
+}
+
+
+// Pear DB tests
+echo "Checking database functions...<br />\n";
+if($addrbook_dsn || $prefs_dsn || $addrbook_global_dsn) {
+ @include_once('DB.php');
+ if (class_exists('DB')) {
+ echo "$IND PHP Pear DB support is present.<br />\n";
+ $db_functions=array(
+ 'dbase' => 'dbase_open',
+ 'fbsql' => 'fbsql_connect',
+ 'interbase' => 'ibase_connect',
+ 'informix' => 'ifx_connect',
+ 'msql' => 'msql_connect',
+ 'mssql' => 'mssql_connect',
+ 'mysql' => 'mysql_connect',
+ 'mysqli' => 'mysqli_connect',
+ 'oci8' => 'ocilogon',
+ 'odbc' => 'odbc_connect',
+ 'pgsql' => 'pgsql_connect',
+ 'sqlite' => 'sqlite_open',
+ 'sybase' => 'sybase_connect'
+ );
+
+ $dsns = array();
+ if($prefs_dsn) $dsns['preferences'] = $prefs_dsn;
+ if($addrbook_dsn) $dsns['addressbook'] = $addrbook_dsn;
+ if($addrbook_global_dsn) $dsns['global addressbook'] = $addrbook_global_dsn;
+
+ foreach($dsns as $type => $dsn) {
+ $dbtype = array_shift(explode(':', $dsn));
+ if(isset($db_functions[$dbtype]) && function_exists($db_functions[$dbtype])) {
+ echo "$IND$dbtype database support present.<br />\n";
+
+ // now, test this interface:
+
+ $dbh = DB::connect($dsn, true);
+ if (DB::isError($dbh)) {
+ do_err('Database error: '. htmlspecialchars(DB::errorMessage($dbh)) .
+ ' in ' .$type .' DSN.');
+ }
+ $dbh->disconnect();
+ echo "$IND$type database connect successful.<br />\n";
+
+ } else {
+ do_err($db.' database support not present!');
+ }
+ }
+ } else {
+ do_err('Required PHP Pear DB support is not available.');;
+ }
+} else {
+ echo $IND."not using database functionality.<br />\n";
+}
?>
<p>Congratulations, your SquirrelMail setup looks fine to me!</p>