'.$IND.'ERROR: ' .$str. "

\n"; if($exit) { echo ''; exit; } } $IND = str_repeat(' ',4); ob_implicit_flush(); /** @ignore */ define('SM_PATH', '../'); /* set default value in order to block remote access to script */ $allow_remote_configtest=false; /* * Load config before output begins. functions/strings.php depends on * functions/globals.php. functions/global.php needs to be run before * any html output starts. If config.php is missing, error will be displayed * later. */ if (file_exists(SM_PATH . 'config/config.php')) { include(SM_PATH . 'config/config.php'); include(SM_PATH . 'functions/strings.php'); } ?> SquirrelMail configtest

SquirrelMail configtest

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 conf.pl in the config/ directory first before you run this script.

'. 'You need to run conf.pl first.'); } do_err('Could not read '.SM_PATH.'config/config.php! Check file permissions.'); } if(!in_array('strings.php', $included)) { do_err('Could not include '.SM_PATH.'functions/strings.php!
'. 'Check permissions on that file.'); } /* Block remote use of script */ if (! $allow_remote_configtest) { sqGetGlobalVar('REMOTE_ADDR',$client_ip,SQ_SERVER); if (! isset($client_ip) || $client_ip!='127.0.0.1') { do_err('Enable "Allow remote configtest" option in squirrelmail configuration in order to use this script.'); } } /* checking PHP specs */ echo "

\n\n" . '\n" . '\n
SquirrelMail version:" . $version . "
Config file version:' . $config_version . "
Config file last modified:' . date ('d F Y H:i:s', filemtime(SM_PATH . 'config/config.php')) . "
\n

\n\n"; echo "Checking PHP configuration...
\n"; 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.
\n"; $php_exts = array('session','pcre'); $diff = array_diff($php_exts, get_loaded_extensions()); if(count($diff)) { do_err('Required PHP extensions missing: '.implode(', ',$diff) ); } echo $IND . "PHP extensions OK.
\n"; /* dangerous php settings */ /** * mbstring.func_overload allows to replace original string and regexp functions * with their equivalents from php mbstring extension. It causes problems when * scripts analyze 8bit strings byte after byte or use 8bit strings in regexp tests. * Setting can be controlled in php.ini (php 4.2.0), webserver config (php 4.2.0) * and .htaccess files (php 4.3.5). */ if (function_exists('mb_internal_encoding') && check_php_version(4,2,0) && (int)ini_get('mbstring.func_overload')!=0) { $mb_error='You have enabled mbstring overloading.' .' It can cause problems with SquirrelMail scripts that rely on single byte string functions.'; do_err($mb_error); } /** * We code with register_globals = off. SquirrelMail should work in such setup * since 1.2.9 and 1.3.0. Running SquirrelMail with register_globals = on can * cause variable corruption and security issues. Globals can be turned off in * php.ini, webserver config and .htaccess files. Scripts can turn off globals only * in php 4.2.3 or older. */ if ((bool) ini_get('register_globals')) { $rg_error='You have enabled php register_globals.' .' Running PHP installation with register_globals=on can cause problems.' .' See ' .'security information about register_globals.'; do_err($rg_error); } /* checking paths */ echo "Checking paths...
\n"; if(!file_exists($data_dir)) { // data_dir is not that important in db_setups. if (isset($prefs_dsn) && ! empty($prefs_dsn)) { $data_dir_error = "Data dir ($data_dir) does not exist!\n"; echo $IND .'ERROR: ' . $data_dir_error; } else { do_err("Data dir ($data_dir) does not exist!"); } } // don't check if errors if(!isset($data_dir_error) && !is_dir($data_dir)) { if (isset($prefs_dsn) && ! empty($prefs_dsn)) { $data_dir_error = "Data dir ($data_dir) is not a directory!\n"; echo $IND . 'ERROR: ' . $data_dir_error; } else { do_err("Data dir ($data_dir) is not a directory!"); } } // datadir should be executable - but no clean way to test on that if(!isset($data_dir_error) && !is_writable($data_dir)) { if (isset($prefs_dsn) && ! empty($prefs_dsn)) { $data_dir_error = "Data dir ($data_dir) is not writable!\n"; echo $IND . 'ERROR: ' . $data_dir_error; } else { do_err("Data dir ($data_dir) is not writable!"); } } if (isset($data_dir_error)) { echo " Some plugins might need access to data directory.
\n"; } else { // todo_ornot: actually write something and read it back. echo $IND . "Data dir OK.
\n"; } if($data_dir == $attachment_dir) { echo $IND . "Attachment dir is the same as data dir.
\n"; if (isset($data_dir_error)) { do_err($data_dir_error); } } else { if(!file_exists($attachment_dir)) { do_err("Attachment dir ($attachment_dir) does not exist!"); } if (!is_dir($attachment_dir)) { do_err("Attachment dir ($attachment_dir) is not a directory!"); } if (!is_writable($attachment_dir)) { do_err("I cannot write to attachment dir ($attachment_dir)!"); } echo $IND . "Attachment dir OK.
\n"; } /* check plugins and themes */ if (isset($plugins[0])) { foreach($plugins as $plugin) { 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); } } echo $IND . "Plugins OK.
\n"; } else { echo $IND . "Plugins are not enabled in config.
\n"; } foreach($theme as $thm) { if(!file_exists($thm['PATH'])) { do_err('You have enabled the '.$thm['NAME'].' theme but I cannot find it ('.$thm['PATH'].').', FALSE); } elseif(!is_readable($thm['PATH'])) { do_err('You have enabled the '.$thm['NAME'].' theme but I cannot read it ('.$thm['PATH'].').', FALSE); } } echo $IND . "Themes OK.
\n"; if ( $squirrelmail_default_language != 'en_US' ) { $loc_path = SM_PATH .'locale/'.$squirrelmail_default_language.'/LC_MESSAGES/squirrelmail.mo'; if( ! file_exists( $loc_path ) ) { do_err('You have set ' . $squirrelmail_default_language . ' as your default language, but I cannot find this translation (should be '. 'in ' . $loc_path . '). Please note that you have to download translations '. 'separately from the main SquirrelMail package.', FALSE); } elseif ( ! is_readable( $loc_path ) ) { do_err('You have set ' . $squirrelmail_default_language . ' as your default language, but I cannot read this translation (file '. 'in ' . $loc_path . ' unreadable).', FALSE); } else { echo $IND . "Default language OK.
\n"; } } else { echo $IND . "Default language OK.
\n"; } echo $IND . "Base URL detected as: " . htmlspecialchars(get_location()) . "
\n"; /* check outgoing mail */ if($use_smtp_tls || $use_imap_tls) { if(!check_php_version(4,3,0)) { do_err('You need at least PHP 4.3.0 for SMTP/IMAP TLS!'); } if(!extension_loaded('openssl')) { do_err('You need the openssl PHP extension to use SMTP/IMAP TLS!'); } } echo "Checking outgoing mail service....
\n"; if($useSendmail) { // is_executable also checks for existance, but we want to be as precise as possible with the errors if(!file_exists($sendmail_path)) { do_err("Location of sendmail program incorrect ($sendmail_path)!"); } if(!is_executable($sendmail_path)) { do_err("I cannot execute the sendmail program ($sendmail_path)!"); } echo $IND . "sendmail OK
\n"; } else { $stream = fsockopen( ($use_smtp_tls?'tls://':'').$smtpServerAddress, $smtpPort, $errorNumber, $errorString); if(!$stream) { do_err("Error connecting to SMTP server \"$smtpServerAddress:$smtpPort\".". "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: ". htmlspecialchars($smtpline)); } fputs($stream, 'QUIT'); fclose($stream); echo $IND . 'SMTP server OK ('. trim(htmlspecialchars($smtpline)).")
\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 . ' : ' . htmlspecialchars($err_str)); } $tmp = fgets($stream, 1024); if (substr($tmp, 0, 3) != '+OK') { do_err("Error connecting to POP Server ($smtpServerAddress:110)" . ' '.htmlspecialchars($tmp)); } fputs($stream, 'QUIT'); fclose($stream); echo $IND . "POP-before-SMTP OK.
\n"; } } /** * Check the IMAP server */ echo "Checking IMAP service....
\n"; /** Can we open a connection? */ $stream = fsockopen( ($use_imap_tls?'tls://':'').$imapServerAddress, $imapPort, $errorNumber, $errorString); if(!$stream) { do_err("Error connecting to IMAP server \"$imapServerAddress:$imapPort\".". "Server error: ($errorNumber) ". htmlspecialchars($errorString)); } /** Is the first response 'OK'? */ $imapline = fgets($stream, 1024); if(substr($imapline, 0,4) != '* OK') { do_err('Error connecting to IMAP server. Server error: '. htmlspecialchars($imapline)); } echo $IND . 'IMAP server ready ('. htmlspecialchars(trim($imapline)).")
\n"; /** Check capabilities */ fputs($stream, "A001 CAPABILITY\r\n"); $capline = fgets($stream, 1024); echo $IND . 'Capabilities: '.htmlspecialchars($capline)."
\n"; if($imap_auth_mech == 'login' && stristr($capline, 'LOGINDISABLED') !== FALSE) { do_err('Your server doesn\'t allow plaintext logins. '. 'Try enabling another authentication mechanism like CRAM-MD5, DIGEST-MD5 or TLS-encryption '. 'in the SquirrelMail configuration.', FALSE); } if($use_imap_tls && stristr($capline, 'STARTTLS') === FALSE) { do_err('You have enabled TLS encryption in the config, but the server does not '. 'report STARTTLS capability. TLS is probably not supported.', FALSE); } /** OK, close connection */ fputs($stream, "A002 LOGOUT\r\n"); fclose($stream); echo "Checking internationalization (i18n) settings...
\n"; echo "$IND gettext - "; if (function_exists('gettext')) { echo 'Gettext functions are available.' .' On some systems you must have appropriate system locales compiled.' ."
\n"; } else { echo 'Gettext functions are unavailable.' .' SquirrelMail will use slower internal gettext functions.' ."
\n"; } echo "$IND mbstring - "; if (function_exists('mb_detect_encoding')) { echo "Mbstring functions are available.
\n"; } else { echo 'Mbstring functions are unavailable.' ." Japanese translation won't work.
\n"; } echo "$IND recode - "; if (function_exists('recode')) { echo "Recode functions are available.
\n"; } elseif (isset($use_php_recode) && $use_php_recode) { echo "Recode functions are unavailable.
\n"; do_err('Your configuration requires recode support, but recode support is missing.'); } else { echo "Recode functions are unavailable.
\n"; } echo "$IND iconv - "; if (function_exists('iconv')) { echo "Iconv functions are available.
\n"; } elseif (isset($use_php_iconv) && $use_php_iconv) { echo "Iconv functions are unavailable.
\n"; do_err('Your configuration requires iconv support, but iconv support is missing.'); } else { echo "Iconv functions are unavailable.
\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.
\n"; } else { echo "Webmail users can't change their time zone settings.
\n"; } // Pear DB tests echo "Checking database functions...
\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.
\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.
\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.
\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 DB.php?' .' The include path is now:' . ini_get('include_path') . '.'; do_err($db_error); } } else { echo $IND."not using database functionality.
\n"; } // LDAP DB tests echo "Checking LDAP functions...
\n"; if( empty($ldap_server) ) { echo $IND."not using LDAP functionality.
\n"; } else { if ( !function_exists('ldap_connect') ) { do_err('Required LDAP support is not available.'); } else { echo "$IND LDAP support present.
\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."
\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
"; } else { do_err('Unable to Bind to LDAP Server'); } @ldap_close($linkid); } else { do_err('Connection to LDAP failed'); } } } } ?>

Congratulations, your SquirrelMail setup looks fine to me!

Login now