Postfix Admin Setup Checker
Running software:
Error: Depends on: PHP v5+
\n";
$error += 1;
} elseif (version_compare(phpversion(), '5.2.3') < 0) {
# smarty uses htmlentities() with 4 parameters, the 4th parameter was introduced in PHP 5.2.3
# older PHP versions will cause warnings
$phpversion = 5;
print "- Recommended PHP version: >= 5.2.3, you have " . phpversion() . "
\n";
} else {
$phpversion = 5;
print "- PHP version " . phpversion() . "
\n";
}
# TODO: check for PHP >= 5.2.3 - smarty uses htmlentities with 4 parameters. The forth parameter was added in PHP 5.2.3, older versions will give a warning
} else {
print "- Unable to check for PHP version. (missing function: phpversion())
\n";
}
//
// Check for Apache version
//
if ($f_apache_get_version == 1) {
print "- " . apache_get_version() . "
\n";
} else {
# not running on Apache.
# However postfixadmin _is_ running, so obviously we are on a supported webserver ;-))
# No need to confuse the user with a warning.
}
print "
";
print "Checking for dependencies:\n";
print "
\n";
//
// Check for Magic Quotes
//
if ($f_get_magic_quotes_gpc == 1) {
if (get_magic_quotes_gpc() == 0) {
print "- Magic Quotes: Disabled - OK
\n";
} else {
print "- Warning: Magic Quotes: ON (internal workaround used)
\n";
}
} else {
print "- Unable to check for Magic Quotes. (missing function: get_magic_quotes_gpc())
\n";
}
//
// Check for config.inc.php
//
$config_loaded = 0;
if ($file_config == 1) {
print "- Depends on: presence config.inc.php - OK
\n";
require_once(dirname(__FILE__) .'/../config.inc.php');
$config_loaded = 1;
if (isset($CONF['configured'])) {
if ($CONF['configured'] === true) {
print "- Checking \$CONF['configured'] - OK\n";
} else {
print "
- Warning: \$CONF['configured'] is 'false'.
\n";
print "You must edit your config.local.php and change this to true (this indicates you've created the database and user)\n";
}
}
} else {
print " - Error: Depends on: presence config.inc.php - NOT FOUND
\n";
print "Create the file, and edit as appropriate (e.g. select database type etc)
";
print "For example:
\n";
print "cp config.inc.php.sample config.inc.php
\n";
$error += 1;
}
//
// Check for config.local.php
//
if ($file_local_config == 1) {
print "- Depends on: presence config.local.php - OK
\n";
} else {
print "- Warning: config.local.php - NOT FOUND
\n";
print "It's Recommended to store your own settings in config.local.php instead of editing config.inc.php
";
print "Create the file, and edit as appropriate (e.g. select database type etc)
";
}
//
// Check if there is support for at least 1 database
//
if (($f_mysql_connect == 0) and ($f_mysqli_connect == 0) and ($f_pg_connect == 0) and ($f_sqlite_open == 0)) {
print "- Error: There is no database support in your PHP setup
\n";
print "To install MySQL 3.23 or 4.0 support on FreeBSD:
\n";
print "% cd /usr/ports/databases/php{$phpversion}-mysql/\n";
print "% make clean install\n";
print " - or with portupgrade -\n";
print "% portinstall php{$phpversion}-mysql
\n";
if ($phpversion >= 5) {
print "To install MySQL 4.1 support on FreeBSD:
\n";
print "% cd /usr/ports/databases/php5-mysqli/\n";
print "% make clean install\n";
print " - or with portupgrade -\n";
print "% portinstall php5-mysqli
\n";
}
print "To install PostgreSQL support on FreeBSD:
\n";
print "% cd /usr/ports/databases/php{$phpversion}-pgsql/\n";
print "% make clean install\n";
print " - or with portupgrade -\n";
print "% portinstall php{$phpversion}-pgsql
\n";
$error += 1;
}
//
// MySQL 3.23, 4.0 functions
//
if ($f_mysql_connect == 1) {
print "- Depends on: MySQL 3.23, 4.0 - OK
\n";
}
//
// MySQL 4.1 functions
//
if ($phpversion >= 5) {
if ($f_mysqli_connect == 1) {
print "- Depends on: MySQL 4.1 - OK\n";
if (!($config_loaded && $CONF['database_type'] == 'mysqli')) {
print "
(change the database_type to 'mysqli' in config.local.php if you want to use MySQL)\n";
}
print " ";
}
}
//
// PostgreSQL functions
//
if ($f_pg_connect == 1) {
print "- Depends on: PostgreSQL - OK \n";
if (!($config_loaded && $CONF['database_type'] == 'pgsql')) {
print "
(change the database_type to 'pgsql' in config.local.php if you want to use PostgreSQL)\n";
}
print " ";
}
if ($f_sqlite_open == 1) {
print "- Depends on: SQLite - OK \n";
if (!($config_loaded && db_sqlite())) {
print "
(change the database_type to 'sqlite' in config.local.php if you want to use SQLite)\n";
}
print " ";
}
//
// Database connection
//
if ($config_loaded) {
list($link, $error_text) = db_connect_with_errors();
if (!empty($link) && $error_text == "") {
print "- Testing database connection (using {$CONF['database_type']}) - OK
";
} else {
print "- Error: Can't connect to database
\n";
print "Please check the \$CONF['database_*'] parameters in config.local.php.\n";
print "$error_text \n";
$error ++;
}
}
//
// Session functions
//
if ($f_session_start == 1) {
print "- Depends on: session - OK
\n";
} else {
print "- Error: Depends on: session - NOT FOUND
\n";
print "To install session support on FreeBSD:
\n";
print "% cd /usr/ports/www/php$phpversion-session/\n";
print "% make clean install\n";
print " - or with portupgrade -\n";
print "% portinstall php$phpversion-session
\n";
$error += 1;
}
//
// PCRE functions
//
if ($f_preg_match == 1) {
print "- Depends on: pcre - OK
\n";
} else {
print "- Error: Depends on: pcre - NOT FOUND
\n";
print "To install pcre support on FreeBSD:
\n";
print "% cd /usr/ports/devel/php$phpversion-pcre/\n";
print "% make clean install\n";
print " - or with portupgrade -\n";
print "% portinstall php$phpversion-pcre
\n";
$error += 1;
}
//
// Multibyte functions
//
if ($f_mb_encode_mimeheader == 1) {
print "- Depends on: multibyte string - OK
\n";
} else {
print "- Error: Depends on: multibyte string - NOT FOUND
\n";
print "To install multibyte string support, install php$phpversion-mbstring \n";
$error += 1;
}
//
// Imap functions
//
if ($f_imap_open == 1) {
print "- Depends on: IMAP functions - OK
\n";
} else {
print "- Warning: Depends on: IMAP functions - NOT FOUND
\n";
print "To install IMAP support, install php$phpversion-imap
\n";
print "Without IMAP support, you won't be able to create subfolders when creating mailboxes. \n";
}
//
// If PHP <7.0, require random_compat works. Currently we bundle it via the Phar extension.
//
if (version_compare($phpversion, "7.0", '<')
&& !extension_loaded('Phar')
&& $config_loaded
&& $CONF['configured']
&& $CONF['encrypt'] == 'php_crypt') {
print "- Requires 'Phar' extension support for secure random_int() function fallback";
print "
Either enable the 'Phar' extension, or install the random_compat library files from https://github.com/paragonie/random_compat and include/require them from functions.inc.php";
print "
PostfixAdmin has bundled lib/random_compat.phar but it's not usable on your installation due to the missing Phar extension. ";
$error += 1;
}
print "
";
if ($error != 0) {
print "Please fix the errors listed above.
";
} else {
print "Everything seems fine... attempting to create/update database structure
\n";
require_once(dirname(__FILE__) .'/upgrade.php');
$tUsername = '';
$setupMessage = '';
$lostpw_error = 0;
$setuppw = "";
if (isset($CONF['setup_password'])) {
$setuppw = $CONF['setup_password'];
}
if (safepost("form") == "setuppw") {
# "setup password" form submitted
if (safepost('setup_password') != safepost('setup_password2')) {
$setupMessage = "The two passwords differ!";
$lostpw_error = 1;
} else {
list($lostpw_error, $lostpw_result) = check_setup_password(safepost('setup_password'), 1);
$setupMessage = $lostpw_result;
$setuppw = "changed";
}
} elseif (safepost("form") == "createadmin") {
# "create admin" form submitted
list($pw_check_error, $pw_check_result) = check_setup_password(safepost('setup_password'));
if ($pw_check_result != 'pass_OK') {
$error += 1;
$setupMessage = $pw_check_result;
}
if ($error == 0 && $pw_check_result == 'pass_OK') {
// XXX need to ensure domains table includes an 'ALL' entry.
$table_domain = table_by_key('domain');
$r = db_query("SELECT * FROM $table_domain WHERE domain = 'ALL'");
if ($r['rows'] == 0) {
db_insert('domain', array('domain' => 'ALL', 'description' => '', 'transport' => '')); // all other fields should default through the schema.
}
$values = array(
'username' => safepost('username'),
'password' => safepost('password'),
'password2' => safepost('password2'),
'superadmin' => 1,
'domains' => array(),
'active' => 1,
);
list($error, $setupMessage, $errormsg) = create_admin($values);
if ($error != 0) {
$tUsername = htmlentities($values['username']);
} else {
$setupMessage .= "You are done with your basic setup. ";
$setupMessage .= "
You can now login to PostfixAdmin using the account you just created.";
}
}
}
if (($setuppw == "" || $setuppw == "changeme" || safeget("lostpw") == 1 || $lostpw_error != 0) /* && $_SERVER['REQUEST_METHOD'] != "POST" */) {
# show "create setup password" form?>
Since version 2.3 there is no requirement to delete setup.php!
Check the config.inc.php file for any other settings that you might need to change!