Commit 4f68a7fe authored by tbrehm's avatar tbrehm
Browse files

- Fixed login attempts bug

- Fixed bug were the interface is enabled after an update on a server were interface = no selected during install
- Fixed a replication problem and made replication more fault tolerant.
parent a672b1eb
......@@ -670,7 +670,7 @@ class installer_dist extends installer_base {
//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
//* and create the symlink
if($this->install_ispconfig_interface == true) {
if($this->install_ispconfig_interface == true && $this->is_update == false) {
if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
......
......@@ -688,7 +688,7 @@ class installer_dist extends installer_base {
//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
//* and create the symlink
if($this->install_ispconfig_interface == true) {
if($this->install_ispconfig_interface == true && $this->is_update == false) {
if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
......
......@@ -35,7 +35,7 @@ class installer_base {
var $db;
public $conf;
public $install_ispconfig_interface = true;
public $is_update = false; // true if it is an update, falsi if it is a new install
public function __construct()
......@@ -938,13 +938,11 @@ class installer_base {
caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
//* Copy the ISPConfig vhost for the controlpanel
// TODO: These are missing! should they be "vhost_dist_*_dir" ?
$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
// Dont just copy over the virtualhost template but add some custom settings
$content = rf("tpl/apache_ispconfig.vhost.master");
$content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content);
......@@ -959,7 +957,7 @@ class installer_base {
//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
//* and create the symlink
if($this->install_ispconfig_interface == true) {
if($this->install_ispconfig_interface == true && $this->is_update == false) {
if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
......
......@@ -101,6 +101,7 @@ $conf['server_id'] = intval($conf_old["server_id"]);
$conf['ispconfig_log_priority'] = $conf_old["log_priority"];
$inst = new installer();
$inst->is_update = true;
//** Detect the installed applications
$inst->find_installed_apps();
......
......@@ -92,7 +92,8 @@ class login_index {
}
//* Check if there already wrong logins
$sql = "SELECT * FROM `attempts_login` WHERE `ip`= '{$ip}' AND `login_time` < NOW() + INTERVAL 15 MINUTE LIMIT 1";
$sql = "SELECT * FROM `attempts_login` WHERE `ip`= '{$ip}' AND `login_time` > (NOW() - INTERVAL 1 MINUTE) LIMIT 1";
echo $sql;
$alreadyfailed = $app->db->queryOneRecord($sql);
//* login to much wrong
if($alreadyfailed['times'] > 5) {
......
......@@ -41,7 +41,7 @@ if($_SESSION["s"]["user"]["typ"] == 'admin') {
$sql = "SELECT ip_address FROM server_ip WHERE server_id = $server_id";
$ips = $app->db->queryAllRecords($sql);
// $ip_select = "<option value=''></option>";
$ip_select = "";
$ip_select = "<option value='*'>*</option>\r\n";
if(is_array($ips)) {
foreach( $ips as $ip) {
//$selected = ($ip["ip_address"] == $this->dataRecord["ip_address"])?'SELECTED':'';
......
......@@ -88,74 +88,80 @@ class modules {
$records = $app->dbmaster->queryAllRecords($sql);
foreach($records as $d) {
$data = unserialize(stripslashes($d["data"]));
if(!$data = unserialize(stripslashes($d["data"]))) {
$data = unserialize($d["data"]);
}
$replication_error = false;
$this->current_datalog_id = $d["datalog_id"];
if($d["action"] == 'i') {
$idx = explode(":",$d["dbidx"]);
$tmp_sql1 = '';
$tmp_sql2 = '';
foreach($data['new'] as $fieldname => $val) {
$tmp_sql1 .= "`$fieldname`,";
$tmp_sql2 .= "'$val',";
}
$tmp_sql1 = substr($tmp_sql1,0,-1);
$tmp_sql2 = substr($tmp_sql2,0,-1);
//$tmp_sql1 .= "$idx[0]";
//$tmp_sql2 .= "$idx[1]";
$sql = "REPLACE INTO $d[dbtable] ($tmp_sql1) VALUES ($tmp_sql2)";
$app->db->query($sql);
if($app->db->errorNumber > 0) {
$replication_error = true;
$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql,LOGLEVEL_ERROR);
}
$app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
}
if($d["action"] == 'u') {
$sql = "UPDATE $d[dbtable] SET ";
foreach($data['new'] as $fieldname => $val) {
$sql .= "`$fieldname` = '$val',";
if(count($data['new']) > 0) {
if($d["action"] == 'i' || $d["action"] == 'u') {
$idx = explode(":",$d["dbidx"]);
$tmp_sql1 = '';
$tmp_sql2 = '';
foreach($data['new'] as $fieldname => $val) {
$tmp_sql1 .= "`$fieldname`,";
$tmp_sql2 .= "'$val',";
}
$tmp_sql1 = substr($tmp_sql1,0,-1);
$tmp_sql2 = substr($tmp_sql2,0,-1);
//$tmp_sql1 .= "$idx[0]";
//$tmp_sql2 .= "$idx[1]";
$sql = "REPLACE INTO $d[dbtable] ($tmp_sql1) VALUES ($tmp_sql2)";
$app->db->query($sql);
if($app->db->errorNumber > 0) {
$replication_error = true;
$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql,LOGLEVEL_ERROR);
}
$app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
}
$sql = substr($sql,0,-1);
$idx = explode(":",$d["dbidx"]);
$sql .= " WHERE $idx[0] = $idx[1]";
$app->db->query($sql);
if($app->db->errorNumber > 0) {
$replication_error = true;
$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql,LOGLEVEL_ERROR);
/*
if($d["action"] == 'u') {
$sql = "UPDATE $d[dbtable] SET ";
foreach($data['new'] as $fieldname => $val) {
$sql .= "`$fieldname` = '$val',";
}
$sql = substr($sql,0,-1);
$idx = explode(":",$d["dbidx"]);
$sql .= " WHERE $idx[0] = $idx[1]";
$app->db->query($sql);
if($app->db->errorNumber > 0) {
$replication_error = true;
$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql,LOGLEVEL_ERROR);
}
$app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
}
$app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
}
if($d["action"] == 'd') {
$idx = explode(":",$d["dbidx"]);
$sql = "DELETE FROM $d[dbtable] ";
$sql .= " WHERE $idx[0] = $idx[1]";
$app->db->query($sql);
if($app->db->errorNumber > 0) {
$replication_error = true;
$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql,LOGLEVEL_ERROR);
*/
if($d["action"] == 'd') {
$idx = explode(":",$d["dbidx"]);
$sql = "DELETE FROM $d[dbtable] ";
$sql .= " WHERE $idx[0] = $idx[1]";
$app->db->query($sql);
if($app->db->errorNumber > 0) {
$replication_error = true;
$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql,LOGLEVEL_ERROR);
}
$app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
}
$app->log("Replicated from master: ".$sql,LOGLEVEL_DEBUG);
}
if($replication_error == false) {
$this->raiseTableHook($d["dbtable"],$d["action"],$data);
//$app->dbmaster->query("DELETE FROM sys_datalog WHERE datalog_id = ".$d["datalog_id"]);
//$app->log("Deleting sys_datalog ID ".$d["datalog_id"],LOGLEVEL_DEBUG);
$app->dbmaster->query("UPDATE server SET updated = ".$d["datalog_id"]." WHERE server_id = ".$conf["server_id"]);
$app->log("Processed datalog_id ".$d["datalog_id"],LOGLEVEL_DEBUG);
if($replication_error == false) {
$this->raiseTableHook($d["dbtable"],$d["action"],$data);
//$app->dbmaster->query("DELETE FROM sys_datalog WHERE datalog_id = ".$d["datalog_id"]);
//$app->log("Deleting sys_datalog ID ".$d["datalog_id"],LOGLEVEL_DEBUG);
$app->dbmaster->query("UPDATE server SET updated = ".$d["datalog_id"]." WHERE server_id = ".$conf["server_id"]);
$app->log("Processed datalog_id ".$d["datalog_id"],LOGLEVEL_DEBUG);
} else {
$app->log("Error in Replication, changes were not processed.",LOGLEVEL_ERROR);
/*
* If there is any error in processing the datalog we can't continue, because
* we do not know if the newer actions require this (old) one.
*/
return;
}
} else {
$app->log("Error in Replication, changes were not processed.",LOGLEVEL_ERROR);
/*
* If there is any error in processing the datalog we can't continue, because
* we do not know if the newer actions require this (old) one.
*/
return;
$app->log("Datalog does not conatin any changes for this record ".$d["datalog_id"],LOGLEVEL_DEBUG);
}
}
......@@ -164,7 +170,9 @@ class modules {
$sql = "SELECT * FROM sys_datalog WHERE datalog_id > ".$conf['last_datalog_id']." AND (server_id = ".$conf["server_id"]." OR server_id = 0) ORDER BY datalog_id";
$records = $app->db->queryAllRecords($sql);
foreach($records as $d) {
$data = unserialize(stripslashes($d["data"]));
if(!$data = unserialize(stripslashes($d["data"]))) {
$data = unserialize($d["data"]);
}
$this->current_datalog_id = $d["datalog_id"];
$this->raiseTableHook($d["dbtable"],$d["action"],$data);
//$app->db->query("DELETE FROM sys_datalog WHERE datalog_id = ".$rec["datalog_id"]);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment