From 0a8f0e4ece06642808c1b52d7ea9c4af3ea356a1 Mon Sep 17 00:00:00 2001
From: tbrehm <t.brehm@ispconfig.org>
Date: Mon, 22 Oct 2012 07:18:05 -0400
Subject: [PATCH] Fixed: FS#2362 - client_id from remoting.inc.php functions is ignored

---
 server/lib/classes/db_mysql.inc.php |   69 +++++++++++++++++++---------------
 1 files changed, 39 insertions(+), 30 deletions(-)

diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 27a62bd..d2b4dd6 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -1,4 +1,3 @@
-
 <?php
 /*
    Copyright (c) 2005, Till Brehm, projektfarm Gmbh
@@ -30,7 +29,7 @@
 
 class db extends mysqli
 {
-  private $dbHost = '';		// hostname of the MySQL server
+  protected $dbHost = '';		// hostname of the MySQL server
   private $dbName = '';		// logical database name on that server
   private $dbUser = '';		// database authorized user
   private $dbPass = '';		// user's password
@@ -42,34 +41,39 @@
   private $record	= array();	// last record fetched
   private $autoCommit = 1;    // Autocommit Transactions
   private $currentRow;		// current row number
-  private $errorNumber = 0;	// last error number
+  public $errorNumber = 0;	// last error number
   public $errorMessage = '';	// last error message
   private $errorLocation = '';// last error location
   public $show_error_messages = false; // false in server, true in interface
 
   // constructor
-  public function __construct() {
-    global $conf;
-    $this->dbHost = $conf['db_host'];
-    $this->dbName = $conf['db_database'];
-    $this->dbUser = $conf['db_user'];
-    $this->dbPass = $conf['db_password'];
+  public function __construct($host = NULL , $user = NULL, $pass = NULL, $database = NULL) {
+    global $app, $conf;
+
+    $this->dbHost = $host ? $host  : $conf['db_host'];
+    $this->dbName = $database ? $database : $conf['db_database'];
+    $this->dbUser = $user ? $user : $conf['db_user'];
+    $this->dbPass = $pass ? $pass : $conf['db_password'];
     $this->dbCharset = $conf['db_charset'];
     $this->dbNewLink = $conf['db_new_link'];
     $this->dbClientFlags = $conf['db_client_flags'];
-    parent::__construct($conf['db_host'], $conf['db_user'],$conf['db_password'],$conf['db_database']);
+
+    parent::__construct($this->dbHost, $this->dbUser, $this->dbPass,$this->dbName);
     if ($this->connect_error) {
       $this->updateError('DB::__construct');
-      return false;
     }
     parent::query( 'SET NAMES '.$this->dbCharset); 
     parent::query( "SET character_set_results = '".$this->dbCharset."', character_set_client = '".$this->dbCharset."', character_set_connection = '".$this->dbCharset."', character_set_database = '".$this->dbCharset."', character_set_server = '".$this->dbCharset."'");
-
   }
 
   public function __destruct() {
     $this->close(); // helps avoid memory leaks, and persitent connections that don't go away.
   }
+
+  /* This allows our private variables to be "read" out side of the class */
+   public function __get($var) {
+	   return isset($this->$var) ? $this->$var : NULL;
+   }
 
   // error handler
   public function updateError($location) {
@@ -89,8 +93,11 @@
       // This right here will allow us to use the samefile for server & interface
       if($this->show_error_messages) {
 	echo $error_msg;
-      } else if(method_exists($app, 'log')) {
+      } else if(is_object($app) && method_exists($app, 'log')) {
 	$app->log($error_msg, LOGLEVEL_WARN);
+      } else {
+	      /* This could be called before $app is ever declared..  In that case we should just spit out to error_log() */
+	   error_log($error_msg);
       }
     }
   }
@@ -218,10 +225,10 @@
     if(is_array($record_old) && count($record_old) > 0) {
       foreach($record_old as $key => $val) {
 	// if(!isset($record_new[$key]) || $record_new[$key] != $val) {
-	if($record_new[$key] != $val) {
+	if(@$record_new[$key] != $val) {
 	  // Record has changed
 	  $diffrec_full['old'][$key] = $val;
-	  $diffrec_full['new'][$key] = $record_new[$key];
+	  $diffrec_full['new'][$key] = @$record_new[$key];
 	  $diff_num++;
 	} else {
 	  $diffrec_full['old'][$key] = $val;
@@ -245,8 +252,8 @@
       return array('diff_num' => $diff_num, 'diff_rec' => $diffrec_full);
 
     }
-
-    //** Function to fill the datalog with a full differential record.
+	
+	//** Function to fill the datalog with a full differential record.
     public function datalogSave($db_table, $action, $primary_field, $primary_id, $record_old, $record_new) {
       global $app,$conf;
 
@@ -267,19 +274,21 @@
       if(isset($record_new['server_id'])) $server_id = $record_new['server_id'];
 
 
-      if($diff_num > 0) {
-	//print_r($diff_num);
-	//print_r($diffrec_full);
-	$diffstr = $app->db->quote(serialize($diffrec_full));
-	$username = $app->db->quote($_SESSION['s']['user']['username']);
-	$dbidx = $primary_field.':'.$primary_id;
+	if($diff_num > 0) {
+		$diffstr = $this->quote(serialize($diffrec_full));
+		if(isset($_SESSION)) {
+			$username = $this->quote($_SESSION['s']['user']['username']);
+		} else {
+			$username = 'admin';
+		}
+		$dbidx = $primary_field.':'.$primary_id;
 
-	if($action == 'INSERT') $action = 'i';
-	if($action == 'UPDATE') $action = 'u';
-	if($action == 'DELETE') $action = 'd';
-	$sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$db_table."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')";
-	$app->db->query($sql);
-      }
+		if($action == 'INSERT') $action = 'i';
+		if($action == 'UPDATE') $action = 'u';
+		if($action == 'DELETE') $action = 'd';
+		$sql = "INSERT INTO sys_datalog (dbtable,dbidx,server_id,action,tstamp,user,data) VALUES ('".$db_table."','$dbidx','$server_id','$action','".time()."','$username','$diffstr')";
+		$this->query($sql);
+	}
 
       return true;
     }
@@ -583,4 +592,4 @@
 
 	      }
 
-	      ?>
+	      ?>
\ No newline at end of file

--
Gitblit v1.9.1