From f4038a2160d55a7f519a3b42be1aa96e29e9a908 Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Wed, 27 Feb 2013 09:01:40 -0500
Subject: [PATCH] - Fixed "FUNCTION databasename.CONCAT does not exist" error for older MySQL versions.

---
 interface/lib/classes/remoting_lib.inc.php |   92 ++++++++++++++++++++++++++++++---------------
 1 files changed, 61 insertions(+), 31 deletions(-)

diff --git a/interface/lib/classes/remoting_lib.inc.php b/interface/lib/classes/remoting_lib.inc.php
index 9726b75..bcfd619 100644
--- a/interface/lib/classes/remoting_lib.inc.php
+++ b/interface/lib/classes/remoting_lib.inc.php
@@ -114,6 +114,7 @@
 		var $sys_default_group;
 		var $sys_groups;
 		var $client_id;
+		var $dataRecord;
 
 		
 		//* Load the form definition from file.
@@ -390,6 +391,7 @@
 								if($dbencode == true) $new_record[$key] = $app->db->quote($new_record[$key]);
                         }
                 }
+                if(isset($record['_ispconfig_pw_crypted'])) $new_record['_ispconfig_pw_crypted'] = $record['_ispconfig_pw_crypted']; // this one is not in form definitions!
                 return $new_record;
         }
 		
@@ -465,7 +467,9 @@
                                         }
                                 break;
                                 case 'UNIQUE':
-                                        if($this->action == 'NEW') {
+										if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
+										if($validator['allowempty'] == 'n' || ($validator['allowempty'] == 'y' && $field_value != '')){
+											if($this->action == 'NEW') {
                                                 $num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."'");
                                                 if($num_rec["number"] > 0) {
                                                         $errmsg = $validator['errmsg'];
@@ -475,7 +479,7 @@
 															$this->errorMessage .= $errmsg."<br />\r\n";
 														}
                                                 }
-                                        } else {
+											} else {
                                                 $num_rec = $app->db->queryOneRecord("SELECT count(*) as number FROM ".$escape.$this->formDef['db_table'].$escape. " WHERE $field_name = '".$app->db->quote($field_value)."' AND ".$this->formDef['db_table_idx']." != ".$this->primary_id);
                                                 if($num_rec["number"] > 0) {
                                                         $errmsg = $validator['errmsg'];
@@ -485,7 +489,8 @@
 															$this->errorMessage .= $errmsg."<br />\r\n";
 														}
                                                 }
-                                        }
+											}
+										}
                                 break;
                                 case 'NOTEMPTY':
                                         if(empty($field_value)) {
@@ -569,31 +574,44 @@
 										}
                                 break;
 								case 'ISIP':
-								//* Check if its a IPv4 or IPv6 address
-								if(function_exists('filter_var')) {
-									if(!filter_var($field_value,FILTER_VALIDATE_IP)) {
-										$errmsg = $validator['errmsg'];
-										if(isset($this->wordbook[$errmsg])) {
-											$this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
-										} else {
-											$this->errorMessage .= $errmsg."<br />\r\n";
-										}
-									}
+								if($validator['allowempty'] != 'y') $validator['allowempty'] = 'n';
+								if($validator['allowempty'] == 'y' && $field_value == '') {
+									//* Do nothing
 								} else {
-									//* Check content with regex, if we use php < 5.2
-									$ip_ok = 0;
-									if(preg_match("/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i", $field_value)){
-										$ip_ok = 1;
+								//* Check if its a IPv4 or IPv6 address
+									if(isset($validator['separator']) && $validator['separator'] != '') {
+										//* When the field may contain several IP addresses, split them by the char defined as separator
+										$field_value_array = explode($validator['separator'],$field_value);
+									} else {
+										$field_value_array[] = $field_value;
 									}
-									if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
-										$ip_ok = 1;
-									}
-									if($ip_ok == 0) {
-										$errmsg = $validator['errmsg'];
-										if(isset($this->wordbook[$errmsg])) {
-											$this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
+									foreach($field_value_array as $field_value) {
+										if(function_exists('filter_var')) {
+											if(!filter_var($field_value,FILTER_VALIDATE_IP)) {
+												$errmsg = $validator['errmsg'];
+												if(isset($this->wordbook[$errmsg])) {
+													$this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
+												} else {
+													$this->errorMessage .= $errmsg."<br />\r\n";
+												}
+											}
 										} else {
-											$this->errorMessage .= $errmsg."<br />\r\n";
+											//* Check content with regex, if we use php < 5.2
+											$ip_ok = 0;
+											if(preg_match("/^(\:\:([a-f0-9]{1,4}\:){0,6}?[a-f0-9]{0,4}|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){0,6}?\:\:|[a-f0-9]{1,4}(\:[a-f0-9]{1,4}){1,6}?\:\:([a-f0-9]{1,4}\:){1,6}?[a-f0-9]{1,4})(\/\d{1,3})?$/i", $field_value)){
+												$ip_ok = 1;
+											}
+											if(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $field_value)){
+												$ip_ok = 1;
+											}
+											if($ip_ok == 0) {
+												$errmsg = $validator['errmsg'];
+												if(isset($this->wordbook[$errmsg])) {
+													$this->errorMessage .= $this->wordbook[$errmsg]."<br />\r\n";
+												} else {
+													$this->errorMessage .= $errmsg."<br />\r\n";
+												}
+											}
 										}
 									}
 								}
@@ -655,6 +673,7 @@
 
                 $this->action = $action;
                 $this->primary_id = $primary_id;
+				$this->dataRecord = $record;
 
                 $record = $this->encode($record,true);
                 $sql_insert_key = '';
@@ -678,7 +697,9 @@
 																$record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
 																$sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
 														} elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') {
-																$sql_insert_val .= "PASSWORD('".$app->db->quote($record[$key])."'), ";
+																$tmp = $app->db->queryOneRecord("SELECT PASSWORD('".$app->db->quote(stripslashes($record[$key]))."') as `crypted`");
+																$record[$key] = $tmp['crypted'];
+																$sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
                                                         } else {
                                                                 $record[$key] = md5(stripslashes($record[$key]));
 																$sql_insert_val .= "'".$app->db->quote($record[$key])."', ";
@@ -705,7 +726,9 @@
                                                                 $record[$key] = $app->auth->crypt_password(stripslashes($record[$key]));
 																$sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
 														} elseif (isset($field['encryption']) && $field['encryption'] == 'MYSQL') {
-																$sql_update .= "`$key` = PASSWORD('".$app->db->quote($record[$key])."'), ";
+																$tmp = $app->db->queryOneRecord("SELECT PASSWORD('".$app->db->quote(stripslashes($record[$key]))."') as `crypted`");
+																$record[$key] = $tmp['crypted'];
+																$sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
 														} else {
                                                                 $record[$key] = md5(stripslashes($record[$key]));
 																$sql_update .= "`$key` = '".$app->db->quote($record[$key])."', ";
@@ -795,18 +818,24 @@
 				$sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$this->formDef['db_table_idx']." = ".$primary_id;
             	return $app->db->queryOneRecord($sql);
 			} elseif (@is_array($primary_id)) {
-				$sql_where = '';
+				$sql_offset = 0;
+                $sql_limit = 0;
+                $sql_where = '';
 				foreach($primary_id as $key => $val) {
 					$key = $app->db->quote($key);
 					$val = $app->db->quote($val);
-					if(stristr($val,'%')) {
+                    if($key == '#OFFSET#') $sql_offset = $app->functions->intval($val);
+                    elseif($key == '#LIMIT#') $sql_limit = $app->functions->intval($val);
+					elseif(stristr($val,'%')) {
 						$sql_where .= "$key like '$val' AND ";
 					} else {
 						$sql_where .= "$key = '$val' AND ";
 					}
 				}
 				$sql_where = substr($sql_where,0,-5);
+                if($sql_where == '') $sql_where = '1';
 				$sql = "SELECT * FROM ".$escape.$this->formDef['db_table'].$escape." WHERE ".$sql_where;
+                if($sql_offset >= 0 && $sql_limit > 0) $sql .= ' LIMIT ' . $sql_offset . ',' . $sql_limit;
 				return $app->db->queryAllRecords($sql);
 			} else {
 				$this->errorMessage = 'The ID must be either an integer or an array.';
@@ -845,7 +874,7 @@
 			$language = $app->db->quote($params["language"]);
 			$groupid = $app->db->datalogInsert('sys_group', "(name,description,client_id) VALUES ('$username','','$insert_id')", 'groupid');
 			$groups = $groupid;
-			$password = $app->auth->crypt_password(stripslashes($password));
+			if(!isset($params['_ispconfig_pw_crypted']) || $params['_ispconfig_pw_crypted'] != 1) $password = $app->auth->crypt_password(stripslashes($password));
 			$sql1 = "INSERT INTO sys_user (username,passwort,modules,startmodule,app_theme,typ,active,language,groups,default_group,client_id)
 			VALUES ('$username','$password','$modules','$startmodule','$usertheme','$type','$active','$language',$groups,$groupid,$insert_id)";
 			$app->db->query($sql1);
@@ -856,7 +885,8 @@
 			$username = $app->db->quote($params["username"]);
 			$clear_password = $app->db->quote($params["password"]);
 			$client_id = $app->functions->intval($client_id);
-			$password = $app->auth->crypt_password(stripslashes($clear_password));
+			if(!isset($params['_ispconfig_pw_crypted']) || $params['_ispconfig_pw_crypted'] != 1) $password = $app->auth->crypt_password(stripslashes($clear_password));
+            else $password = $clear_password;
 			if ($clear_password) $pwstring = ", passwort = '$password'"; else $pwstring ="" ;
 			$sql = "UPDATE sys_user set username = '$username' $pwstring WHERE client_id = $client_id";
 			$app->db->query($sql);

--
Gitblit v1.9.1