915 lines
21 KiB
PHP
915 lines
21 KiB
PHP
|
<?php
|
||
|
|
||
|
|
||
|
|
||
|
global $dps_version;
|
||
|
$dps_version = "1";
|
||
|
|
||
|
|
||
|
|
||
|
// edit settings.php to change server' settings
|
||
|
include( "settings.php" );
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// no end-user settings below this point
|
||
|
|
||
|
|
||
|
|
||
|
// no caching
|
||
|
//header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
|
||
|
header('Cache-Control: no-store, no-cache, must-revalidate');
|
||
|
header('Cache-Control: post-check=0, pre-check=0', FALSE);
|
||
|
header('Pragma: no-cache');
|
||
|
|
||
|
|
||
|
|
||
|
// enable verbose error reporting to detect uninitialized variables
|
||
|
error_reporting( E_ALL );
|
||
|
|
||
|
|
||
|
|
||
|
// page layout for web-based setup
|
||
|
$setup_header = "
|
||
|
<HTML>
|
||
|
<HEAD><TITLE>Demo Permissions Server Web-based setup</TITLE></HEAD>
|
||
|
<BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#0000FF VLINK=#FF0000>
|
||
|
|
||
|
<CENTER>
|
||
|
<TABLE WIDTH=75% BORDER=0 CELLSPACING=0 CELLPADDING=1>
|
||
|
<TR><TD BGCOLOR=#000000>
|
||
|
<TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=10>
|
||
|
<TR><TD BGCOLOR=#EEEEEE>";
|
||
|
|
||
|
$setup_footer = "
|
||
|
</TD></TR></TABLE>
|
||
|
</TD></TR></TABLE>
|
||
|
</CENTER>
|
||
|
</BODY></HTML>";
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// ensure that magic quotes are on (adding slashes before quotes
|
||
|
// so that user-submitted data can be safely submitted in DB queries)
|
||
|
if( !get_magic_quotes_gpc() ) {
|
||
|
// force magic quotes to be added
|
||
|
$_GET = array_map( 'dps_addslashes_deep', $_GET );
|
||
|
$_POST = array_map( 'dps_addslashes_deep', $_POST );
|
||
|
$_REQUEST = array_map( 'dps_addslashes_deep', $_REQUEST );
|
||
|
$_COOKIE = array_map( 'dps_addslashes_deep', $_COOKIE );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// all calls need to connect to DB, so do it once here
|
||
|
dps_connectToDatabase();
|
||
|
|
||
|
// close connection down below (before function declarations)
|
||
|
|
||
|
|
||
|
// testing:
|
||
|
//sleep( 5 );
|
||
|
|
||
|
|
||
|
// general processing whenver server.php is accessed directly
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// grab POST/GET variables
|
||
|
$action = "";
|
||
|
if( isset( $_REQUEST[ "action" ] ) ) {
|
||
|
$action = $_REQUEST[ "action" ];
|
||
|
}
|
||
|
|
||
|
$debug = "";
|
||
|
if( isset( $_REQUEST[ "debug" ] ) ) {
|
||
|
$debug = $_REQUEST[ "debug" ];
|
||
|
}
|
||
|
|
||
|
$remoteIP = "";
|
||
|
if( isset( $_SERVER[ "REMOTE_ADDR" ] ) ) {
|
||
|
$remoteIP = $_SERVER[ "REMOTE_ADDR" ];
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
if( $action == "version" ) {
|
||
|
global $dps_version;
|
||
|
echo "$dps_version";
|
||
|
}
|
||
|
else if( $action == "show_log" ) {
|
||
|
dps_showLog();
|
||
|
}
|
||
|
else if( $action == "clear_log" ) {
|
||
|
dps_clearLog();
|
||
|
}
|
||
|
else if( $action == "create_demo_id" ) {
|
||
|
dps_createDemoID();
|
||
|
}
|
||
|
else if( $action == "block_demo_id" ) {
|
||
|
dps_blockDemoID();
|
||
|
}
|
||
|
else if( $action == "delete_demo_id" ) {
|
||
|
dps_deleteDemoID();
|
||
|
}
|
||
|
else if( $action == "check_permitted" ) {
|
||
|
dps_checkPermitted();
|
||
|
}
|
||
|
else if( $action == "show_data" ) {
|
||
|
dps_showData();
|
||
|
}
|
||
|
else if( $action == "show_detail" ) {
|
||
|
dps_showDetail();
|
||
|
}
|
||
|
else if( $action == "dps_setup" ) {
|
||
|
global $setup_header, $setup_footer;
|
||
|
echo $setup_header;
|
||
|
|
||
|
echo "<H2>Demo Permissions Server Web-based Setup</H2>";
|
||
|
|
||
|
echo "Creating tables:<BR>";
|
||
|
|
||
|
echo "<CENTER><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=1>
|
||
|
<TR><TD BGCOLOR=#000000>
|
||
|
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=5>
|
||
|
<TR><TD BGCOLOR=#FFFFFF>";
|
||
|
|
||
|
dps_setupDatabase();
|
||
|
|
||
|
echo "</TD></TR></TABLE></TD></TR></TABLE></CENTER><BR><BR>";
|
||
|
|
||
|
echo $setup_footer;
|
||
|
}
|
||
|
else if( preg_match( "/server\.php/", $_SERVER[ "SCRIPT_NAME" ] ) ) {
|
||
|
// server.php has been called without an action parameter
|
||
|
|
||
|
// the preg_match ensures that server.php was called directly and
|
||
|
// not just included by another script
|
||
|
|
||
|
// quick (and incomplete) test to see if we should show instructions
|
||
|
global $tableNamePrefix;
|
||
|
|
||
|
// check if our "games" table exists
|
||
|
$tableName = $tableNamePrefix . "demos";
|
||
|
|
||
|
$exists = dps_doesTableExist( $tableName );
|
||
|
|
||
|
if( $exists ) {
|
||
|
echo "Demo Permissions server database setup and ready";
|
||
|
}
|
||
|
else {
|
||
|
// start the setup procedure
|
||
|
|
||
|
global $setup_header, $setup_footer;
|
||
|
echo $setup_header;
|
||
|
|
||
|
echo "<H2>Demo Permissions Server Web-based Setup</H2>";
|
||
|
|
||
|
echo "Demo Permissions Server will walk you through a " .
|
||
|
"brief setup process.<BR><BR>";
|
||
|
|
||
|
echo "Step 1: ".
|
||
|
"<A HREF=\"server.php?action=dps_setup\">".
|
||
|
"create the database tables</A>";
|
||
|
|
||
|
echo $setup_footer;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// done processing
|
||
|
// only function declarations below
|
||
|
|
||
|
dps_closeDatabase();
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Creates the database tables needed by seedBlogs.
|
||
|
*/
|
||
|
function dps_setupDatabase() {
|
||
|
global $tableNamePrefix;
|
||
|
|
||
|
$tableName = $tableNamePrefix . "log";
|
||
|
if( ! dps_doesTableExist( $tableName ) ) {
|
||
|
|
||
|
// this table contains general info about the server
|
||
|
// use INNODB engine so table can be locked
|
||
|
$query =
|
||
|
"CREATE TABLE $tableName(" .
|
||
|
"entry TEXT NOT NULL, ".
|
||
|
"entry_time DATETIME NOT NULL );";
|
||
|
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
echo "<B>$tableName</B> table created<BR>";
|
||
|
}
|
||
|
else {
|
||
|
echo "<B>$tableName</B> table already exists<BR>";
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
$tableName = $tableNamePrefix . "demos";
|
||
|
if( ! dps_doesTableExist( $tableName ) ) {
|
||
|
|
||
|
// this table contains general info about each game
|
||
|
// use INNODB engine so table can be locked
|
||
|
$query =
|
||
|
"CREATE TABLE $tableName(" .
|
||
|
"demo_id CHAR(10) NOT NULL PRIMARY KEY," .
|
||
|
"creation_date DATETIME NOT NULL," .
|
||
|
"last_run_date DATETIME NOT NULL," .
|
||
|
"note CHAR(40) NOT NULL," .
|
||
|
"blocked TINYINT NOT NULL," .
|
||
|
"run_count INT NOT NULL );";
|
||
|
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
echo "<B>$tableName</B> table created<BR>";
|
||
|
}
|
||
|
else {
|
||
|
echo "<B>$tableName</B> table already exists<BR>";
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
$tableName = $tableNamePrefix . "runs";
|
||
|
if( ! dps_doesTableExist( $tableName ) ) {
|
||
|
|
||
|
// this table contains information for each user
|
||
|
$query =
|
||
|
"CREATE TABLE $tableName(" .
|
||
|
"demo_id CHAR(10) NOT NULL," .
|
||
|
"run_date DATETIME NOT NULL," .
|
||
|
"blocked TINYINT NOT NULL," .
|
||
|
"ip_address CHAR(255) NOT NULL," .
|
||
|
"PRIMARY KEY( demo_id, run_date ) );";
|
||
|
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
echo "<B>$tableName</B> table created<BR>";
|
||
|
}
|
||
|
else {
|
||
|
echo "<B>$tableName</B> table already exists<BR>";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_showLog() {
|
||
|
$password = dps_checkPassword( "show_log" );
|
||
|
|
||
|
echo "[<a href=\"server.php?action=show_data&password=$password" .
|
||
|
"\">Main</a>]<br><br><br>";
|
||
|
|
||
|
global $tableNamePrefix;
|
||
|
|
||
|
$query = "SELECT * FROM $tableNamePrefix"."log ".
|
||
|
"ORDER BY entry_time DESC;";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
$numRows = mysql_numrows( $result );
|
||
|
|
||
|
|
||
|
|
||
|
echo "<a href=\"server.php?action=clear_log&password=$password\">".
|
||
|
"Clear log</a>";
|
||
|
|
||
|
echo "<hr>";
|
||
|
|
||
|
echo "$numRows log entries:<br><br><br>\n";
|
||
|
|
||
|
|
||
|
for( $i=0; $i<$numRows; $i++ ) {
|
||
|
$time = mysql_result( $result, $i, "entry_time" );
|
||
|
$entry = mysql_result( $result, $i, "entry" );
|
||
|
|
||
|
echo "<b>$time</b>:<br>$entry<hr>\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_clearLog() {
|
||
|
$password = dps_checkPassword( "clear_log" );
|
||
|
|
||
|
echo "[<a href=\"server.php?action=show_data&password=$password" .
|
||
|
"\">Main</a>]<br>";
|
||
|
|
||
|
global $tableNamePrefix;
|
||
|
|
||
|
$query = "DELETE FROM $tableNamePrefix"."log;";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
if( $result ) {
|
||
|
echo "Log cleared.";
|
||
|
}
|
||
|
else {
|
||
|
echo "DELETE operation failed?";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
function dps_createDemoID() {
|
||
|
$password = dps_checkPassword( "create_demo_id" );
|
||
|
|
||
|
global $tableNamePrefix;
|
||
|
|
||
|
|
||
|
$note = "";
|
||
|
if( isset( $_REQUEST[ "note" ] ) ) {
|
||
|
$note = $_REQUEST[ "note" ];
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
$found_unused_id = 0;
|
||
|
$salt = 0;
|
||
|
|
||
|
|
||
|
while( ! $found_unused_id ) {
|
||
|
|
||
|
$randVal = rand();
|
||
|
|
||
|
$hash = md5( $note . uniqid( "$randVal"."$salt", true ) );
|
||
|
|
||
|
$hash = strtoupper( $hash );
|
||
|
|
||
|
|
||
|
$demo_id = substr( $hash, 0, 10 );
|
||
|
|
||
|
|
||
|
|
||
|
// make code more human-friendly (alpha only)
|
||
|
|
||
|
$digitArray =
|
||
|
array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" );
|
||
|
$letterArray =
|
||
|
array( "W", "H", "J", "K", "X", "M", "N", "P", "T", "Y" );
|
||
|
|
||
|
$demo_id = str_replace( $digitArray, $letterArray, $demo_id );
|
||
|
|
||
|
|
||
|
|
||
|
$query = "INSERT INTO $tableNamePrefix". "demos VALUES ( " .
|
||
|
"'$demo_id', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, ".
|
||
|
"'$note', '0', '0' );";
|
||
|
|
||
|
|
||
|
$result = mysql_query( $query );
|
||
|
|
||
|
if( $result ) {
|
||
|
$found_unused_id = 1;
|
||
|
|
||
|
global $remoteIP;
|
||
|
dps_log( "Demo $demo_id created by $remoteIP" );
|
||
|
|
||
|
|
||
|
//echo "$demo_id";
|
||
|
dps_showData();
|
||
|
}
|
||
|
else {
|
||
|
global $debug;
|
||
|
if( $debug == 1 ) {
|
||
|
echo "Duplicate ids? Error: " . mysql_error() ."<br>";
|
||
|
}
|
||
|
// try again
|
||
|
$salt += 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_blockDemoID() {
|
||
|
$password = dps_checkPassword( "block_demo_id" );
|
||
|
|
||
|
|
||
|
global $tableNamePrefix;
|
||
|
|
||
|
$demo_id = "";
|
||
|
if( isset( $_REQUEST[ "demo_id" ] ) ) {
|
||
|
$demo_id = $_REQUEST[ "demo_id" ];
|
||
|
}
|
||
|
|
||
|
$demo_id = strtoupper( $demo_id );
|
||
|
|
||
|
|
||
|
$blocked = "";
|
||
|
if( isset( $_REQUEST[ "blocked" ] ) ) {
|
||
|
$blocked = $_REQUEST[ "blocked" ];
|
||
|
}
|
||
|
|
||
|
|
||
|
global $remoteIP;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
$query = "SELECT * FROM $tableNamePrefix"."demos ".
|
||
|
"WHERE demo_id = '$demo_id';";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
$numRows = mysql_numrows( $result );
|
||
|
|
||
|
if( $numRows == 1 ) {
|
||
|
|
||
|
|
||
|
$query = "UPDATE $tableNamePrefix"."demos SET " .
|
||
|
"blocked = '$blocked' " .
|
||
|
"WHERE demo_id = '$demo_id';";
|
||
|
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
|
||
|
dps_log( "$demo_id block changed to $blocked by $remoteIP" );
|
||
|
|
||
|
dps_showData();
|
||
|
}
|
||
|
else {
|
||
|
dps_log( "$demo_id not found for $remoteIP" );
|
||
|
|
||
|
echo "$demo_id not found";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_deleteDemoID() {
|
||
|
$password = dps_checkPassword( "delete_demo_id" );
|
||
|
|
||
|
global $tableNamePrefix, $remoteIP;
|
||
|
|
||
|
$demo_id = "";
|
||
|
if( isset( $_REQUEST[ "demo_id" ] ) ) {
|
||
|
$demo_id = $_REQUEST[ "demo_id" ];
|
||
|
}
|
||
|
|
||
|
$demo_id = strtoupper( $demo_id );
|
||
|
|
||
|
|
||
|
$query = "DELETE FROM $tableNamePrefix"."demos ".
|
||
|
"WHERE demo_id = '$demo_id';";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
if( $result ) {
|
||
|
dps_log( "$demo_id deleted by $remoteIP" );
|
||
|
|
||
|
echo "$demo_id deleted.<hr>";
|
||
|
|
||
|
dps_showData();
|
||
|
}
|
||
|
else {
|
||
|
dps_log( "$demo_id delete failed for $remoteIP" );
|
||
|
|
||
|
echo "DELETE operation failed?";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_checkPermitted() {
|
||
|
$demo_id = "";
|
||
|
if( isset( $_REQUEST[ "demo_id" ] ) ) {
|
||
|
$demo_id = $_REQUEST[ "demo_id" ];
|
||
|
}
|
||
|
|
||
|
$demo_id = strtoupper( $demo_id );
|
||
|
|
||
|
|
||
|
$challenge = "";
|
||
|
if( isset( $_REQUEST[ "challenge" ] ) ) {
|
||
|
$challenge = $_REQUEST[ "challenge" ];
|
||
|
}
|
||
|
|
||
|
|
||
|
global $tableNamePrefix, $remoteIP;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
$query = "SELECT * FROM $tableNamePrefix"."demos ".
|
||
|
"WHERE demo_id = '$demo_id';";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
$numRows = mysql_numrows( $result );
|
||
|
|
||
|
if( $numRows == 1 ) {
|
||
|
|
||
|
$row = mysql_fetch_array( $result, MYSQL_ASSOC );
|
||
|
|
||
|
$blocked = $row[ "blocked" ];
|
||
|
|
||
|
|
||
|
// catalog blocked runs, too
|
||
|
$run_count = $row[ "run_count" ];
|
||
|
|
||
|
$run_count ++;
|
||
|
|
||
|
|
||
|
$query = "UPDATE $tableNamePrefix"."demos SET " .
|
||
|
"last_run_date = CURRENT_TIMESTAMP, " .
|
||
|
"run_count = '$run_count' " .
|
||
|
"WHERE demo_id = '$demo_id';";
|
||
|
|
||
|
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
$query = "INSERT INTO $tableNamePrefix". "runs VALUES ( " .
|
||
|
"'$demo_id', CURRENT_TIMESTAMP, '$blocked', '$remoteIP' );";
|
||
|
|
||
|
$result = mysql_query( $query );
|
||
|
|
||
|
if( !$blocked ) {
|
||
|
|
||
|
dps_log( "$demo_id permitted to run by $remoteIP" );
|
||
|
|
||
|
|
||
|
// response to challenge using shared secret
|
||
|
|
||
|
global $sharedSecret;
|
||
|
|
||
|
$hash = sha1( $challenge . $sharedSecret );
|
||
|
|
||
|
$hash = strtoupper( $hash );
|
||
|
|
||
|
|
||
|
|
||
|
echo "permitted $hash";
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
dps_log( "$demo_id denied to run by $remoteIP" );
|
||
|
|
||
|
echo "denied";
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
function dps_showData() {
|
||
|
$password = dps_checkPassword( "show_data" );
|
||
|
|
||
|
global $tableNamePrefix, $remoteIP;
|
||
|
|
||
|
|
||
|
echo "[<a href=\"server.php?action=show_data&password=$password" .
|
||
|
"\">Main</a>]";
|
||
|
|
||
|
|
||
|
$query = "SELECT * FROM $tableNamePrefix"."demos ".
|
||
|
"ORDER BY last_run_date DESC;";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
$numRows = mysql_numrows( $result );
|
||
|
|
||
|
// form
|
||
|
?>
|
||
|
|
||
|
<hr>
|
||
|
Create new ID:<br>
|
||
|
<FORM ACTION="server.php" METHOD="post">
|
||
|
<INPUT TYPE="hidden" NAME="password" VALUE="<?php echo $password;?>">
|
||
|
<INPUT TYPE="hidden" NAME="action" VALUE="create_demo_id">
|
||
|
Note:
|
||
|
<INPUT TYPE="text" MAXLENGTH=40 SIZE=20 NAME="note">
|
||
|
<INPUT TYPE="Submit" VALUE="Generate">
|
||
|
</FORM>
|
||
|
<hr>
|
||
|
|
||
|
<?php
|
||
|
|
||
|
|
||
|
echo "$numRows active IDs:<br><br><br>\n";
|
||
|
|
||
|
echo "<table border=1 cellpadding=5>\n";
|
||
|
|
||
|
echo "<tr><td>Demo ID</td>\n";
|
||
|
echo "<td>Note</td>\n";
|
||
|
echo "<td>Blocked?</td>\n";
|
||
|
echo "<td>Created</td> <td>Test</td> <td>Last Run</td>";
|
||
|
echo "<td>Run Count</td></tr>\n";
|
||
|
|
||
|
|
||
|
for( $i=0; $i<$numRows; $i++ ) {
|
||
|
$demo_id = mysql_result( $result, $i, "demo_id" );
|
||
|
$creation = mysql_result( $result, $i, "creation_date" );
|
||
|
$lastRun = mysql_result( $result, $i, "last_run_date" );
|
||
|
$count = mysql_result( $result, $i, "run_count" );
|
||
|
$note = mysql_result( $result, $i, "note" );
|
||
|
$blocked = mysql_result( $result, $i, "blocked" );
|
||
|
|
||
|
$block_toggle = "";
|
||
|
|
||
|
if( $blocked ) {
|
||
|
$blocked = "BLOCKED";
|
||
|
$block_toggle = "<a href=\"server.php?action=block_demo_id&".
|
||
|
"blocked=0&demo_id=$demo_id&password=$password\">unblock</a>";
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
$blocked = "";
|
||
|
$block_toggle = "<a href=\"server.php?action=block_demo_id&".
|
||
|
"blocked=1&demo_id=$demo_id&password=$password\">block</a>";
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
// challenge to include in test link
|
||
|
$randVal = rand();
|
||
|
|
||
|
$challenge = md5( $demo_id . uniqid( "$randVal", true ) );
|
||
|
|
||
|
|
||
|
echo "<tr>\n";
|
||
|
|
||
|
echo "<td><b>$demo_id</b></td>\n";
|
||
|
echo "<td>$note</td>\n";
|
||
|
echo "<td align=right>$blocked [$block_toggle]</td>\n";
|
||
|
echo "<td>$creation</td> ";
|
||
|
echo "<td>[<a href=\"server.php?action=check_permitted".
|
||
|
"&demo_id=$demo_id&challenge=$challenge\">run test</a>]</td>";
|
||
|
echo "<td>$lastRun</td>";
|
||
|
echo "<td>$count runs ";
|
||
|
|
||
|
echo "[<a href=\"server.php?action=show_detail&password=$password" .
|
||
|
"&demo_id=$demo_id\">list</a>]</td>";
|
||
|
|
||
|
echo "</tr>\n";
|
||
|
}
|
||
|
echo "</table>";
|
||
|
echo "<hr>";
|
||
|
|
||
|
echo "<a href=\"server.php?action=show_log&password=$password\">".
|
||
|
"Show log</a>";
|
||
|
echo "<hr>";
|
||
|
echo "Generated for $remoteIP\n";
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_showDetail() {
|
||
|
$password = dps_checkPassword( "show_detail" );
|
||
|
|
||
|
echo "[<a href=\"server.php?action=show_data&password=$password" .
|
||
|
"\">Main</a>]";
|
||
|
|
||
|
global $tableNamePrefix;
|
||
|
|
||
|
|
||
|
$demo_id = "";
|
||
|
if( isset( $_REQUEST[ "demo_id" ] ) ) {
|
||
|
$demo_id = $_REQUEST[ "demo_id" ];
|
||
|
}
|
||
|
|
||
|
$demo_id = strtoupper( $demo_id );
|
||
|
|
||
|
|
||
|
$query = "SELECT * FROM $tableNamePrefix"."runs ".
|
||
|
"WHERE demo_id = '$demo_id' ORDER BY run_date DESC;";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
$numRows = mysql_numrows( $result );
|
||
|
|
||
|
echo "$numRows runs for $demo_id:";
|
||
|
|
||
|
echo " [<a href=\"server.php?action=delete_demo_id&password=$password" .
|
||
|
"&demo_id=$demo_id\">DELETE this id</a>]";
|
||
|
|
||
|
echo "<br><br><br>\n";
|
||
|
|
||
|
|
||
|
for( $i=0; $i<$numRows; $i++ ) {
|
||
|
$date = mysql_result( $result, $i, "run_date" );
|
||
|
$ipAddress = mysql_result( $result, $i, "ip_address" );
|
||
|
|
||
|
$blocked = mysql_result( $result, $i, "blocked" );
|
||
|
|
||
|
if( $blocked ) {
|
||
|
$blocked = "BLOCKED";
|
||
|
}
|
||
|
else {
|
||
|
$blocked = "";
|
||
|
}
|
||
|
|
||
|
echo "<b>$date</b>: $ipAddress $blocked<hr>\n";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// general-purpose functions down here, many copied from seedBlogs
|
||
|
|
||
|
/**
|
||
|
* Connects to the database according to the database variables.
|
||
|
*/
|
||
|
function dps_connectToDatabase() {
|
||
|
global $databaseServer,
|
||
|
$databaseUsername, $databasePassword, $databaseName;
|
||
|
|
||
|
|
||
|
mysql_connect( $databaseServer, $databaseUsername, $databasePassword )
|
||
|
or dps_fatalError( "Could not connect to database server: " .
|
||
|
mysql_error() );
|
||
|
|
||
|
mysql_select_db( $databaseName )
|
||
|
or dps_fatalError( "Could not select $databaseName database: " .
|
||
|
mysql_error() );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Closes the database connection.
|
||
|
*/
|
||
|
function dps_closeDatabase() {
|
||
|
mysql_close();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Queries the database, and dies with an error message on failure.
|
||
|
*
|
||
|
* @param $inQueryString the SQL query string.
|
||
|
*
|
||
|
* @return a result handle that can be passed to other mysql functions.
|
||
|
*/
|
||
|
function dps_queryDatabase( $inQueryString ) {
|
||
|
|
||
|
$result = mysql_query( $inQueryString )
|
||
|
or dps_fatalError( "Database query failed:<BR>$inQueryString<BR><BR>" .
|
||
|
mysql_error() );
|
||
|
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Checks whether a table exists in the currently-connected database.
|
||
|
*
|
||
|
* @param $inTableName the name of the table to look for.
|
||
|
*
|
||
|
* @return 1 if the table exists, or 0 if not.
|
||
|
*/
|
||
|
function dps_doesTableExist( $inTableName ) {
|
||
|
// check if our table exists
|
||
|
$tableExists = 0;
|
||
|
|
||
|
$query = "SHOW TABLES";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
|
||
|
$numRows = mysql_numrows( $result );
|
||
|
|
||
|
|
||
|
for( $i=0; $i<$numRows && ! $tableExists; $i++ ) {
|
||
|
|
||
|
$tableName = mysql_result( $result, $i, 0 );
|
||
|
|
||
|
if( $tableName == $inTableName ) {
|
||
|
$tableExists = 1;
|
||
|
}
|
||
|
}
|
||
|
return $tableExists;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_log( $message ) {
|
||
|
global $enableLog, $tableNamePrefix;
|
||
|
|
||
|
$slashedMessage = addslashes( $message );
|
||
|
|
||
|
if( $enableLog ) {
|
||
|
$query = "INSERT INTO $tableNamePrefix"."log VALUES ( " .
|
||
|
"'$slashedMessage', CURRENT_TIMESTAMP );";
|
||
|
$result = dps_queryDatabase( $query );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Displays the error page and dies.
|
||
|
*
|
||
|
* @param $message the error message to display on the error page.
|
||
|
*/
|
||
|
function dps_fatalError( $message ) {
|
||
|
//global $errorMessage;
|
||
|
|
||
|
// set the variable that is displayed inside error.php
|
||
|
//$errorMessage = $message;
|
||
|
|
||
|
//include_once( "error.php" );
|
||
|
|
||
|
// for now, just print error message
|
||
|
$logMessage = "Fatal error: $message";
|
||
|
|
||
|
echo( $logMessage );
|
||
|
|
||
|
dps_log( $logMessage );
|
||
|
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Displays the operation error message and dies.
|
||
|
*
|
||
|
* @param $message the error message to display.
|
||
|
*/
|
||
|
function dps_operationError( $message ) {
|
||
|
|
||
|
// for now, just print error message
|
||
|
echo( "ERROR: $message" );
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Recursively applies the addslashes function to arrays of arrays.
|
||
|
* This effectively forces magic_quote escaping behavior, eliminating
|
||
|
* a slew of possible database security issues.
|
||
|
*
|
||
|
* @inValue the value or array to addslashes to.
|
||
|
*
|
||
|
* @return the value or array with slashes added.
|
||
|
*/
|
||
|
function dps_addslashes_deep( $inValue ) {
|
||
|
return
|
||
|
( is_array( $inValue )
|
||
|
? array_map( 'dps_addslashes_deep', $inValue )
|
||
|
: addslashes( $inValue ) );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Recursively applies the stripslashes function to arrays of arrays.
|
||
|
* This effectively disables magic_quote escaping behavior.
|
||
|
*
|
||
|
* @inValue the value or array to stripslashes from.
|
||
|
*
|
||
|
* @return the value or array with slashes removed.
|
||
|
*/
|
||
|
function dps_stripslashes_deep( $inValue ) {
|
||
|
return
|
||
|
( is_array( $inValue )
|
||
|
? array_map( 'sb_stripslashes_deep', $inValue )
|
||
|
: stripslashes( $inValue ) );
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
function dps_checkPassword( $inFunctionName ) {
|
||
|
$password = "";
|
||
|
if( isset( $_REQUEST[ "password" ] ) ) {
|
||
|
$password = $_REQUEST[ "password" ];
|
||
|
}
|
||
|
|
||
|
global $accessPassword, $tableNamePrefix, $remoteIP;
|
||
|
|
||
|
if( $password != $accessPassword ) {
|
||
|
echo "Incorrect password.";
|
||
|
|
||
|
dps_log( "Failed $inFunctionName access with password: $password" );
|
||
|
|
||
|
die();
|
||
|
}
|
||
|
|
||
|
return $password;
|
||
|
}
|
||
|
|
||
|
|
||
|
?>
|