+echo "Checking internationalization (i18n) settings...<br />\n";
+echo "$IND gettext - ";
+if (function_exists('gettext')) {
+ echo 'Gettext functions are available.'
+ .' On some systems 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 (isset($use_php_recode) && $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 (isset($use_php_iconv) && $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' => 'pg_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) {
+ $aDsn = explode(':', $dsn);
+ $dbtype = array_shift($aDsn);
+ 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($dbtype.' database support not present!');
+ }
+ }
+ } else {
+ $db_error='Required PHP PEAR DB support is not available.'
+ .' Is PEAR installed and is the include path set correctly to find <tt>DB.php</tt>?'
+ .' The include path is now:<tt>' . ini_get('include_path') . '</tt>.';
+ do_err($db_error);
+ }
+} else {
+ echo $IND."not using database functionality.<br />\n";
+}
+
+// LDAP DB tests
+echo "Checking LDAP functions...<br />\n";
+if( empty($ldap_server) ) {
+ echo $IND."not using LDAP functionality.<br />\n";
+} else {
+ if ( !function_exists('ldap_connect') ) {
+ do_err('Required LDAP support is not available.');
+ } else {
+ echo "$IND LDAP support present.<br />\n";
+ foreach ( $ldap_server as $param ) {
+
+ $linkid = @ldap_connect($param['host'], (empty($param['port']) ? 389 : $param['port']) );
+
+ if ( $linkid ) {
+ echo "$IND LDAP connect to ".$param['host']." successful: ".$linkid."<br />\n";
+
+ if ( !empty($param['protocol']) &&
+ !ldap_set_option($linkid, LDAP_OPT_PROTOCOL_VERSION, $param['protocol']) ) {
+ do_err('Unable to set LDAP protocol');
+ }
+
+ if ( empty($param['binddn']) ) {
+ $bind = @ldap_bind($linkid);
+ } else {
+ $bind = @ldap_bind($param['binddn'], $param['bindpw']);
+ }
+
+ if ( $bind ) {
+ echo "$IND LDAP Bind Successful <br />";
+ } else {
+ do_err('Unable to Bind to LDAP Server');
+ }
+
+ @ldap_close($linkid);
+ } else {
+ do_err('Connection to LDAP failed');
+ }
+ }
+ }
+}