You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2009/09/01 19:14:32 UTC
svn commit: r810129 - /incubator/vcl/trunk/web/testsetup.php
Author: jfthomps
Date: Tue Sep 1 17:14:32 2009
New Revision: 810129
URL: http://svn.apache.org/viewvc?rev=810129&view=rev
Log:
VCL-209
this script is to aide in installation of the web frontend by testing various setting and configuration options
Added:
incubator/vcl/trunk/web/testsetup.php
Added: incubator/vcl/trunk/web/testsetup.php
URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/web/testsetup.php?rev=810129&view=auto
==============================================================================
--- incubator/vcl/trunk/web/testsetup.php (added)
+++ incubator/vcl/trunk/web/testsetup.php Tue Sep 1 17:14:32 2009
@@ -0,0 +1,433 @@
+<?php
+$header = "<html><head><title>VCL Setup Test Script</title>\n";
+$header .= "<style type=\"text/css\">\n";
+$header .= "ul {margin-top: 0;}\n";
+$header .= "li {list-style-type: none;}\n";
+$header .= ".pass {color: green;}\n";
+$header .= ".fail {color: red;}\n";
+$header .= ".title {font-weight: bold; font-style: italic;}\n";
+$header .= "</style>\n";
+$header .= "</head>\n";
+if(isset($_GET['cookietest'])) {
+ print $header;
+ print "<body style=\"margin: 0; padding: 0;\">\n";
+ if(isset($_COOKIE['cookietest']))
+ print "<span class=pass>Successfully set a test cookie</span>\n";
+ else
+ print "<span class=fail>Failed to set a test cookie</span>\n";
+ print "</body></html>\n";
+ exit;
+}
+if(isset($_GET['includeconftest'])) {
+ if(! is_readable('.ht-inc/conf.php')) {
+ print "unreadable";
+ exit;
+ }
+ if(include('.ht-inc/conf.php'))
+ print 'worked';
+ exit;
+}
+if(isset($_GET['includesecretstest'])) {
+ if(! is_readable('.ht-inc/secrets.php')) {
+ print "unreadable";
+ exit;
+ }
+ if(include('.ht-inc/secrets.php'))
+ print 'worked';
+ exit;
+}
+$header .= "<body>\n";
+
+function exHandler($errno, $errmsg) {
+ print "Error: $errmsg<br>";
+}
+set_error_handler('exHandler');
+function pass($msg) {
+ print "<li><span class=pass>$msg</span></li>\n";
+}
+
+function fail($msg) {
+ print "<li><span class=fail>$msg</span></li>\n";
+}
+
+function title($msg) {
+ print "<span class=title>$msg ...</span><br>\n";
+}
+
+$myurl = "http://";
+if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on")
+ $myurl = "https://";
+$myurl .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+
+# test including secrets.php
+$data = '';
+if($fp = fopen("$myurl?includesecretstest=1", 'r')) {
+ $data = fread($fp, 100);
+ fclose($fp);
+}
+$includesecrets = 1;
+$includeconf = 1;
+#$allowurlopen = ini_get('allow_url_fopen');
+$allowurlopen = 0;
+if($allowurlopen && (empty($data) || $data == 'unreadable')) {
+ print $header;
+ # php version
+ print "PHP version: " . phpversion() . "<br><br>\n";
+ title("Including .ht-inc/secrets.php");
+ print "<ul>\n";
+ if($data == 'unreadable')
+ fail("unable to read .ht-inc/secrets.php - check the permissions of the file");
+ else
+ fail("unable to include .ht-inc/secrets.php - this is probably due to a syntax error in .ht-inc/secrets.php");
+ fail("skipping tests for contents of .ht-inc/secrets.php");
+ print "</ul>\n";
+ $includesecrets = 0;
+ $includeconf = 0;
+}
+
+# conf.php test
+if($includesecrets) {
+ $data = '';
+ if($fp = fopen("$myurl?includeconftest=1", 'r')) {
+ $data = fread($fp, 100);
+ fclose($fp);
+ }
+ $allowurlopen = ini_get('allow_url_fopen');
+ if($allowurlopen && (empty($data) || $data == 'unreadable')) {
+ print $header;
+ # php version
+ print "PHP version: " . phpversion() . "<br><br>\n";
+ title("Including .ht-inc/conf.php");
+ print "<ul>\n";
+ if($data == 'unreadable')
+ fail("unable to read .ht-inc/conf.php - check the permissions of the file");
+ else
+ fail("unable to include .ht-inc/conf.php - this is probably due to a syntax error in .ht-inc/conf.php");
+ fail("skipping tests for contents of .ht-inc/conf.php");
+ print "</ul>\n";
+ $includeconf = 0;
+ }
+}
+else {
+ title("Including .ht-inc/conf.php");
+ print "<ul>\n";
+ fail("cannot include .ht-inc/conf.php when including of .ht-inc/secrets.php fails");
+ print "</ul>\n";
+}
+
+# conf.php tests
+if($includeconf && include('.ht-inc/conf.php')) {
+ $host = $_SERVER['HTTP_HOST'];
+ if(! defined('COOKIEDOMAIN')) {
+ print $header;
+ # php version
+ print "PHP version: " . phpversion() . "<br><br>\n";
+ title("Including .ht-inc/conf.php");
+ print "<ul>\n";
+ pass("successfully included .ht-inc/conf.php");
+ print "</ul>\n";
+ title("Checking COOKIEDOMAIN setting in .ht-inc/conf.php");
+ print "<ul>\n";
+ fail("COOKIEDOMAIN is not defined in .ht-inc/conf.php");
+ print "</ul>\n";
+ }
+ else {
+ $len = strlen(COOKIEDOMAIN);
+ if($len && substr_compare($host, COOKIEDOMAIN, 0 - $len, $len, true) != 0) {
+ print $header;
+ # php version
+ print "PHP version: " . phpversion() . "<br><br>\n";
+ title("Including .ht-inc/conf.php");
+ print "<ul>\n";
+ pass("successfully included .ht-inc/conf.php");
+ print "</ul>\n";
+ title("Checking COOKIEDOMAIN setting in .ht-inc/conf.php");
+ print "<ul>\n";
+ fail("COOKIEDOMAIN (" . COOKIEDOMAIN . ") does not match all of or ending of the hostname of this server ($host). This will prevent cookies from being set.");
+ print "</ul>\n";
+ }
+ else {
+ $expire = time() + 10;
+ setcookie("cookietest", 1, $expire, '/', COOKIEDOMAIN);
+ print $header;
+ # php version
+ print "PHP version: " . phpversion() . "<br><br>\n";
+ title("Including .ht-inc/conf.php");
+ print "<ul>\n";
+ pass("successfully included .ht-inc/conf.php");
+ print "</ul>\n";
+ title("Checking COOKIEDOMAIN setting in .ht-inc/conf.php");
+ print "<ul>\n";
+ $test = COOKIEDOMAIN;
+ if(empty($test))
+ pass("COOKIEDOMAIN is set to empty string (this is valid and will result in the domain of cookies being set to $host)");
+ else
+ pass("COOKIEDOMAIN (" . COOKIEDOMAIN . ") appears to be set correctly");
+ print "<iframe src=\"$myurl?cookietest=1\" width=200px height=20px scrolling=0 style=\"border: 0; padding: 0px\"></iframe><br>\n";
+ print "</ul>\n";
+ }
+ }
+ # check for BASEURL starting with https
+ title("Checking that BASEURL in conf.php is set to use https");
+ print "<ul>\n";
+ if(! defined('BASEURL'))
+ fail("BASEURL is not defined in .ht-inc/conf.php");
+ else {
+ if(substr_compare(BASEURL, 'https:', 0, 6, true) == 0)
+ pass("BASEURL correctly set to use https");
+ else
+ fail("BASEURL is not set to use https. https is required.");
+ }
+ print "</ul>\n";
+
+ # check for SCRIPT being set
+ title("Checking that SCRIPT is set appropriately");
+ print "<ul>\n";
+ if(! defined('SCRIPT'))
+ fail("SCRIPT is not defined in .ht-inc/conf.php");
+ else {
+ if(substr_compare(SCRIPT, '/', 0, 1, true) == 0 &&
+ substr_compare(SCRIPT, '.php', -4, 4, true) == 0)
+ pass("SCRIPT appears to be set correctly");
+ else
+ fail("SCRIPT does not appear to be set correctly");
+ }
+ print "</ul>\n";
+}
+
+# required extentions
+title("Testing for required php extensions");
+$requiredexts = array('gd', 'mcrypt', 'mysql', 'openssl', 'sysvsem', 'xml', 'xmlrpc', 'session', 'pcre', 'sockets', 'json', 'ldap');
+$exts = get_loaded_extensions();
+$diff = array_diff($requiredexts, $exts);
+print "<ul>\n";
+if(count($diff)) {
+ $missing = implode(', ', $diff);
+ fail("Missing these extensiosn: $missing. Depending on the extension, some or all of VCL will not work.");
+}
+else
+ pass("All required modules are installed");
+if(! in_array('ldap', $exts)) {
+ print "<li>NOTE: The <strong>ldap</strong> extension is only required if using LDAP authentication</li>\n";
+}
+print "</ul>\n";
+
+# secrets.php file and mysql connection
+if($includesecrets && include('.ht-inc/secrets.php')) {
+ title("Checking values in .ht-inc/secrets.php");
+ print "<ul>\n";
+ $trymysqlconnect = 1;
+ $allok = 1;
+ if(empty($vclhost)) {
+ fail("\$vclhost in .ht-inc/secrets.php is not set");
+ $trymysqlconnect = 0;
+ $allok = 0;
+ }
+ if(empty($vcldb)) {
+ fail("\$vcldb in .ht-inc/secrets.php is not set");
+ $trymysqlconnect = 0;
+ $allok = 0;
+ }
+ if(empty($vclusername)) {
+ fail("\$vclusername in .ht-inc/secrets.php is not set");
+ $trymysqlconnect = 0;
+ $allok = 0;
+ }
+ if(empty($vclpassword)) {
+ fail("\$vclpassword in .ht-inc/secrets.php is not set");
+ $trymysqlconnect = 0;
+ $allok = 0;
+ }
+ if(empty($mcryptkey)) {
+ fail("\$mcryptkey in .ht-inc/secrets.php is not set");
+ $allok = 0;
+ }
+ if(empty($mcryptiv)) {
+ fail("\$mcryptiv in .ht-inc/secrets.php is not set");
+ $allok = 0;
+ }
+ elseif(strlen($mcryptiv) != 8) {
+ fail("\$mcryptiv in .ht-inc/secrets.php needs to be 8 characters");
+ $allok = 0;
+ }
+ if(empty($pemkey)) {
+ fail("\$pemkey in .ht-inc/secrets.php is not set");
+ $allok = 0;
+ }
+ if($allok)
+ pass("all required values in .ht-inc/secrets.php appear to be set");
+ print "</ul>\n";
+ if($trymysqlconnect && in_array('mysql', $exts) && in_array('sockets', $exts)) {
+ title("Testing mysql connection");
+ print "<ul>\n";
+ if($fp = fsockopen($vclhost, 3306, $errno, $errstr, 5)) {
+ $link = mysql_connect($vclhost, $vclusername, $vclpassword);
+ if(! $link)
+ fail("Could not connect to mysql on $vclhost");
+ else {
+ pass("Successfully connected to mysql on $vclhost");
+ if(mysql_select_db($vcldb, $link))
+ pass("Successfully selected database ($vcldb) on $vclhost");
+ else
+ fail("Could not select database ($vcldb) on $vclhost");
+ }
+ }
+ else
+ fail("Could not connect to port 3306 on $vclhost");
+ print "</ul>\n";
+ }
+}
+
+# test mcrypt
+title("Testing mcrypt");
+print "<ul>\n";
+if(in_array('mcrypt', $exts)) {
+ if($includesecrets && ! empty($mcryptkey) && ! empty($mcryptiv) && strlen($mcryptiv) == 8) {
+ $teststring = 'testing';
+ if($cryptdata = mcrypt_encrypt(MCRYPT_BLOWFISH, $mcryptkey, $teststring, MCRYPT_MODE_CBC, $mcryptiv)) {
+ pass("Successfully encrypted test string");
+ $decrypted = mcrypt_decrypt(MCRYPT_BLOWFISH, $mcryptkey, $cryptdata, MCRYPT_MODE_CBC, $mcryptiv);
+ if(trim($decrypted) == $teststring)
+ pass("Successfully decrypted test string");
+ else
+ fail("Failed to decrypt test string");
+ }
+ else {
+ fail("Failed to encrypt data with mcrypt");
+ }
+ }
+ elseif(strlen($mcryptiv) != 8)
+ fail("Cannot test encryption when \$mcryptiv is not exactly 8 characters");
+ else
+ fail("Cannot test encryption without \$mcryptkey and \$mcryptiv from .ht-inc/secrets.php");
+}
+else
+ fail("mcrypt extension missing");
+print "</ul>\n";
+
+# encryption keys
+$privkeyok = 0;
+$pubkeyok = 0;
+if(in_array('openssl', $exts)) {
+ title("checking openssl encryption keys");
+ print "<ul>\n";
+ if($includesecrets && ! empty($pemkey)) {
+ if(is_readable(".ht-inc/keys.pem")) {
+ $fp = fopen(".ht-inc/keys.pem", "r");
+ $key = fread($fp, 8192);
+ fclose($fp);
+ $keys["private"] = openssl_pkey_get_private($key, $pemkey);
+ if(! $keys['private'])
+ fail("Could not create private key from private key file (.ht-inc/keys.pem). Try running .ht-inc/genkeys.sh again.");
+ else {
+ pass("successfully created private key from private key file");
+ $privkeyok = 1;
+ }
+ }
+ else
+ fail("Could not read private key file (.ht-inc/keys.pem). Check permissions on the file.");
+ }
+ else
+ fail("Cannot test private key file without \$pemkey from .ht-inc/secrets.php");
+
+ if(is_readable(".ht-inc/pubkey.pem")) {
+ $fp = fopen(".ht-inc/pubkey.pem", "r");
+ $key = fread($fp, 8192);
+ fclose($fp);
+ $keys["public"] = openssl_pkey_get_public($key);
+ if(! $keys['public'])
+ fail("Could not create public key from public key file (.ht-inc/pubkey.pem). Try running .ht-inc/genkeys.sh again.");
+ else {
+ pass("successfully created public key from public key file");
+ $pubkeyok = 1;
+ }
+ }
+ else
+ fail("Could not read public key file (.ht-inc/pubkey.pem). Check permissions on the file.");
+ print "</ul>\n";
+
+ title("Testing openssl encryption");
+ print "<ul>\n";
+ if(! $privkeyok)
+ fail("cannot test encryption without a valid private key");
+ else {
+ if(openssl_private_encrypt('test string', $cryptdata, $keys["private"])) {
+ pass("successfully encrypted test string");
+ if(! $pubkeyok)
+ fail("cannot test decryption without a valid public key");
+ else {
+ if(openssl_public_decrypt($cryptdata, $tmp, $keys['public'])) {
+ if($tmp == 'test string')
+ pass("successfully decrypted test string");
+ else
+ fail("failed to decrypt test string");
+ }
+ else
+ fail("failed to decrypt test string");
+ }
+ }
+ else
+ fail("failed to encrypt test data");
+ }
+ print "</ul>\n";
+}
+
+
+# check dojo directories
+title("Testing for existance of dojo and dojoAjax directories");
+print "<ul>\n";
+if(is_dir('./dojoAjax')) {
+ pass("dojoAjax directory exists");
+ if(is_readable('./dojoAjax'))
+ pass("dojoAjax directory is readable");
+ else
+ fail("dojoAjax directory is not readable. Check permissions on this directory");
+}
+else
+ fail("dojoAjax directory does not exist. Download and install Dojo Toolkit 0.4.0");
+if(is_dir('./dojo')) {
+ pass("dojo directory exists");
+ if(is_readable('./dojo'))
+ pass("dojo directory is readable");
+ else
+ fail("dojo directory is not readable. Check permissions on this directory");
+}
+else
+ fail("dojo directory does not exist. Download and install Dojo Toolkit 1.1.0");
+print "</ul>\n";
+
+# check for jpgraph directory
+title("Testing for existance of jpgraph directory");
+print "<ul>\n";
+if(is_dir('.ht-inc/jpgraph')) {
+ pass(".ht-inc/jpgraph directory exists");
+ if(is_readable('.ht-inc/jpgraph'))
+ pass(".ht-inc/jpgraphdirectory is readable");
+ else
+ fail(".ht-inc/jpgraphdirectory is not readable. Check permissions on this directory");
+}
+else
+ fail(".ht-inc/jpgraph directory does not exist. This will only prevent statistic graphs from being generated. To correct, download and install the 2.x series of jpgraph.");
+print "</ul>\n";
+
+# php display errors
+title("Checking value of PHP display_errors");
+$a = ini_get('display_errors');
+print "<ul>\n";
+if($a == 'Off')
+ print "<li>display_errors: <strong>disabled</strong></li>\n";
+elseif($a == 'On')
+ print "<li>display_errors: <strong>enabled</strong></li>\n";
+else
+ fail("failed to determine value of display_errors");
+?>
+<li>NOTE: Displaying errors in a production system is a security risk; however,<br>
+while getting VCL up and running, having them displayed makes debugging<br>
+a little easier. Edit your php.ini file to modify this setting.</li>
+</ul>
+<?php
+
+print "Done";
+
+print "</body></html>\n";
+?>