function slist()
{
    $search = trim($_GET["search"]);
    if ($search != null) {
        $search = str_replace(".", "\\.", $search);
        $search = str_replace("*", ".*?", $search);
        $search = str_replace(" ", "\\s", $search);
    }
    $q = new mysql();
    if (is_numeric($_GET["instance-id"]) && $_GET["instance-id"] > 0) {
        $q = new mysql_multi($_GET["instance-id"]);
        $AppenData = "XHR.appendData('instance-id','{$_GET["instance-id"]}');";
        $uriplus = "&instance-id={$_GET["instance-id"]}";
    }
    $array = $q->SHOW_VARIABLES();
    $tpl = new templates();
    $page = CurrentPageName();
    $html = "<center>\n<table cellspacing='0' cellpadding='0' border='0' class='tableView' style='width:100%'>\n<thead class='thead'>\n\t<tr>\n\t\t<th width=1%>" . imgtootltip("refresh-24.png", "{refresh}", "MysqlsSearch()") . "</th>\n\t\t<th width=1%>&nbsp;</th>\n\t\t<th width=99%>&nbsp;</th>\n\t</tr>\n</thead>\n<tbody class='tbody'>";
    while (list($num, $ligne) = each($array)) {
        if ($classtr == "oddRow") {
            $classtr = null;
        } else {
            $classtr = "oddRow";
        }
        if ($ligne == null) {
            $ligne = "&nbsp;";
        }
        if ($search != null) {
            if (!preg_match("#{$search}#", $num)) {
                continue;
            }
        }
        if (strpos($ligne, ",")) {
            $tbl = explode(",", $ligne);
            $ligne = @implode("<br>", $tbl);
        }
        $color = "black";
        if ($ligne == "OFF") {
            $color = "#9B9999";
        }
        if ($ligne == "NO") {
            $color = "#9B9999";
        }
        if ($ligne == "DISABLED") {
            $color = "#9B9999";
        }
        if (is_numeric($ligne)) {
            if ($ligne < 1) {
                $color = "#9B9999";
            }
        }
        $html = $html . "\n\t\t<tr class={$classtr}>\n\t\t\t\n\t\t\t<td width=1% style='font-size:14px;font-weight:bold;color:{$color}' colspan=2>{$num}</td>\n\t\t\t<td width=99% style='font-size:14px;font-weight:bold;color:{$color}'>{$ligne}</td>\n\t\t</tr>\n\t\t";
    }
    $html = $html . "</table>";
    echo $tpl->_ENGINE_parse_body($html);
}
Exemple #2
0
function backup_freewebs($ID, $servername)
{
    include_once dirname(__FILE__) . "/ressources/class.freeweb.inc";
    $free = new freeweb($servername);
    backup_events($ID, $servername, "INFO, {$servername} Directory:`{$free->WORKING_DIRECTORY}`", __LINE__);
    $date_start = time();
    if (!is_dir("{$free->WORKING_DIRECTORY}")) {
        backup_events($ID, $servername, "ERROR, {$servername} Directory:`{$free->WORKING_DIRECTORY}` no such directory", __LINE__);
        return;
    }
    $DestinationPath = "{$GLOBALS["MOUNTED_PATH_FINAL"]}/freewebs/{$servername}/www";
    backup_mkdir($DestinationPath);
    if (!backup_isdir($DestinationPath)) {
        backup_events($ID, $servername, "ERROR, {$DestinationPath} permission denied or no such file or directory", __LINE__);
        return false;
    }
    $info = backup_copy($free->WORKING_DIRECTORY, "{$DestinationPath}", $ID);
    backup_events($ID, $servername, "INFO,{$free->WORKING_DIRECTORY}\n{$info}", __LINE__);
    if ($free->mysql_database != null) {
        $q = new mysql();
        if ($free->mysql_instance_id > 0) {
            $q = new mysql_multi($free->mysql_instance_id);
        }
        if (!$q->DATABASE_EXISTS($free->mysql_database)) {
            backup_events($ID, $servername, "ERROR,{$free->mysql_database} no such database", __LINE__);
            $date_end = time();
            $calculate = distanceOfTimeInWords($date_start, $date_end);
            backup_events($ID, $servername, "INFO, time: {$calculate}", __LINE__);
            return;
        }
        backup_mysql_database_mysqldump($ID, $free->mysql_database, "{$GLOBALS["MOUNTED_PATH_FINAL"]}/freewebs/{$servername}/MySQL", $free->mysql_instance_id);
    }
    $date_end = time();
    $calculate = distanceOfTimeInWords($date_start, $date_end);
    backup_events($ID, $servername, "INFO, time: {$calculate}", __LINE__);
}
Exemple #3
0
function table_empty()
{
    $q = new mysql();
    $instance_id = $_POST["instance-id"];
    if (!is_numeric($instance_id)) {
        $instance_id = 0;
    }
    if ($instance_id > 0) {
        $q = new mysql_multi($instance_id);
    }
    $sql = "TRUNCATE TABLE `{$_POST["mysql-empty"]}`";
    $q->QUERY_SQL($sql, $_POST["database"]);
    if (!$q->ok) {
        echo $q->mysql_error . "\n{$sql}";
        return;
    }
    if ($instance_id == 0) {
        $q->QUERY_SQL("UPDATE mysqldbtables SET tableRows=0,tablesize=0 WHERE tablename='{$_POST["mysql-empty"]}' AND databasename='{$_POST["database"]}'", "artica_backup");
        if (!$q->ok) {
            echo $q->mysql_error . "\n{$sql}";
            return;
        }
    } else {
        $q = new mysql();
        $q->QUERY_SQL("UPDATE mysqldbtablesmulti SET tableRows=0,tablesize=0 WHERE tablename='{$_POST["mysql-empty"]}' AND databasename='{$_POST["database"]}' AND instance_id='{$_POST["instance-id"]}'", "artica_backup");
        if (!$q->ok) {
            echo $q->mysql_error . "\n{$sql}";
            return;
        }
    }
    $sock = new sockets();
    $sock->getFrameWork("mysql.php?filstats=yes");
}
Exemple #4
0
function mysql_instance_list()
{
    $tpl = new templates();
    $MyPage = CurrentPageName();
    $q = new mysql();
    $search = '%';
    $table = "mysqlmulti";
    $page = 1;
    $FORCE_FILTER = "";
    if ($q->COUNT_ROWS($table, 'artica_backup') == 0) {
        writelogs("{$table}, no row", __FILE__, __FUNCTION__, __FILE__, __LINE__);
        $data['page'] = $page;
        $data['total'] = $total;
        $data['rows'] = array();
        echo json_encode($data);
        return;
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if ($_POST["query"] != null) {
        $_POST["query"] = "*" . $_POST["query"] . "*";
        $_POST["query"] = str_replace("**", "*", $_POST["query"]);
        $_POST["query"] = str_replace("**", "*", $_POST["query"]);
        $_POST["query"] = str_replace("*", "%", $_POST["query"]);
        $search = $_POST["query"];
        $searchstring = "AND (`{$_POST["qtype"]}` LIKE '{$search}')";
        $sql = "SELECT COUNT(*) as TCOUNT FROM `{$table}` WHERE 1 {$FORCE_FILTER} {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql));
        $total = $ligne["TCOUNT"];
    } else {
        $sql = "SELECT COUNT(*) as TCOUNT FROM `{$table}` WHERE 1 {$FORCE_FILTER}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, 'artica_backup'));
        $total = $ligne["TCOUNT"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    $sql = "SELECT *  FROM `{$table}` WHERE 1 {$searchstring} {$FORCE_FILTER} {$ORDER} {$limitSql}";
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $results = $q->QUERY_SQL($sql, 'artica_backup');
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (!$q->ok) {
        $data['rows'][] = array('id' => $ligne[time() + 1], 'cell' => array($q->mysql_error, "", "", ""));
        $data['rows'][] = array('id' => $ligne[time()], 'cell' => array($sql, "", "", ""));
        echo json_encode($data);
        return;
    }
    //if(mysql_num_rows($results)==0){$data['rows'][] = array('id' => $ligne[time()],'cell' => array($sql,"", "",""));}
    // http://www.techrepublic.com/blog/opensource/10-mysql-variables-that-you-should-monitor/56
    $sock = new sockets();
    while ($ligne = mysql_fetch_assoc($results)) {
        $id = $ligne["ID"];
        $RSS = null;
        $icon_status = "danger24.png";
        $icon_stop = imgsimple("24-stop.png", "{stop}", "Loadjs('{$MyPage}?mysql-server-service-js=yes&ID={$ligne["ID"]}&action=stop');");
        $icon_stopoff = imgsimple("24-stop-grey.png", "{stop}", "");
        $icon_run = imgsimple("24-run.png", "{run}", "Loadjs('{$MyPage}?mysql-server-service-js=yes&ID={$ligne["ID"]}&action=start');");
        $icon_stats = imgsimple("statistics-24.png", "{run}", "Loadjs('system.mysql.graphs.php?instance-id={$ligne["ID"]}');");
        if (!isset($ligne["usesocket"])) {
            $ligne["usesocket"] = 0;
        }
        $GBSTAT = trim($sock->getFrameWork("mysql.php?instance-status=yes&instance_id={$id}"));
        if ($GBSTAT == "ON") {
            $run = "{running}";
            $MEMAR = unserialize(base64_decode($sock->getFrameWork("mysql.php?instance-memory=yes&instance-id={$id}")));
            $RSS = "<br>{memory}: <strong>" . FormatBytes($MEMAR[0]) . "</strong><br>{virtual_memory}: <strong>" . FormatBytes($MEMAR[1]) . "</strong>";
            $icon_status = "ok24.png";
        } else {
            $icon_stop = $icon_run;
            $run = "{stopped}";
        }
        $qq = new mysql_multi($ligne["ID"]);
        $qr = $qq->GLOBAL_STATUS();
        $explain = "<strong>{$qr["Threads_created"]}</strong> {threads_created},\n\t\t<br><strong>{$qr["Threads_running"]}</strong> {threads_running}<br>{since}:" . UptimeString($qr["Uptime"]) . "{$RSS}";
        if ($GBSTAT != "ON") {
            $explain = "{stopped}";
        }
        $run = $tpl->_ENGINE_parse_body($run);
        $explain = $tpl->_ENGINE_parse_body($explain);
        $tt = @implode(",", $f);
        $js = "Loadjs('{$MyPage}?mysql-server-js=yes&ID={$ligne["ID"]}');";
        $delete = imgsimple("delete-24.png", "{delete} {$ligne["pattern"]}", "Loadjs('{$MyPage}?mysql-delete-js=yes&ID={$ligne["ID"]}');");
        $net = "{$ligne["listen_addr"]}:{$ligne["listen_port"]}";
        if ($ligne["usesocket"] == 0) {
            $net = ".../mysqld{$ligne["ID"]}.sock";
        }
        $member = imgsimple("members-priv-24.png", "{member}", "Loadjs('{$MyPage}?root-account-js=yes&instance-id={$ligne["ID"]}')");
        $browse = imgsimple("table-show-24.png", "{member}", "Loadjs('mysql.browse.php?instance-id={$ligne["ID"]}')");
        $data['rows'][] = array('id' => $id, 'cell' => array("<a href=\"javascript:blur();\" OnClick=\"javascript:{$js}\" style='font-size:16px;text-decoration:underline'>{$ligne["servername"]}</span></a><br><i>{$run}</i>", "<span style='font-size:16px'>{$net}</span>", "<span style='font-size:14px'>{$explain}</span>", "<div style=margin-top:15px>{$browse}</div>", "<div style=margin-top:15px>{$icon_stats}", "<div style=margin-top:15px>{$member}", "<div style=margin-top:15px><img src='img/{$icon_status}'></div>", "<div style=margin-top:15px><span id='animate-service-instance-{$ligne["ID"]}'>{$icon_stop}</span></div>", "<div style=margin-top:15px><span id='animate-service-instance-{$ligne["ID"]}'>{$delete}</div>"));
    }
    echo json_encode($data);
}
Exemple #5
0
function members_add_save()
{
    if ($GLOBALS["VERBOSE"]) {
        echo __FUNCTION__ . "<br>";
    }
    $server = trim($_POST["servername"]);
    $username = trim($_POST["username"]);
    $password = url_decode_special_tool($_POST["password"]);
    if ($server == "*") {
        $server = "%";
    }
    if ($GLOBALS["VERBOSE"]) {
        echo __LINE__ . " ->mysql()<br>";
    }
    $q = new mysql();
    if (is_numeric($_POST["instance-id"]) && $_POST["instance-id"] > 0) {
        $q = new mysql_multi($_GET["instance-id"]);
    }
    $OrginalPassword = $q->mysql_password;
    $sql = "SELECT User FROM user WHERE Host='{$server}' AND User='******'";
    if ($GLOBALS["VERBOSE"]) {
        echo $sql . "<br>";
    }
    $ligne = @mysql_fetch_array($q->QUERY_SQL($sql, "mysql"));
    if ($GLOBALS["VERBOSE"]) {
        echo "User:{$ligne["User"]}<br>";
    }
    if (trim($ligne["User"]) == null) {
        $sql = "CREATE USER '{$username}'@'{$server}' IDENTIFIED BY '{$password}';";
        if ($GLOBALS["VERBOSE"]) {
            echo $sql . "<br>";
        }
        if (!$q->EXECUTE_SQL($sql)) {
            $q->mysql_admin = "root";
            $q->mysql_password = $OrginalPassword;
            if (!$q->EXECUTE_SQL($sql)) {
                $q->mysql_admin = "root";
                $q->mysql_password = null;
                if (!$q->EXECUTE_SQL($sql)) {
                    echo "CREATE USER user:{$username}\nHost:{$server}\n\n{$q->mysql_error}";
                    return;
                }
            }
        }
    }
    $sql = "GRANT ALL PRIVILEGES ON * . * TO '{$username}'@'{$server}' IDENTIFIED BY '{$password}' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0";
    if ($GLOBALS["VERBOSE"]) {
        echo $sql . "<br>";
    }
    if (!$q->EXECUTE_SQL($sql)) {
        $q->mysql_admin = "root";
        $q->mysql_password = $OrginalPassword;
        $q->ok = true;
        if (!$q->EXECUTE_SQL($sql)) {
            $q->mysql_admin = "root";
            $q->mysql_password = null;
            $q->ok = true;
            if (!$q->EXECUTE_SQL($sql)) {
                echo "user GRANT ALL PRIVILEGES ON:{$username}\nHost:{$server}\n\n{$q->mysql_error}";
                return;
            }
        }
    }
}
function mysqlcheck($db, $table, $instance_id)
{
    if ($GLOBALS["VERBOSE"]) {
        echo "START:: " . __FUNCTION__ . "\n";
    }
    $pidfile = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . ".pid";
    $pid = @file_get_contents($pidfile);
    $unix = new unix();
    if ($unix->process_exists($pid)) {
        echo "Process already exists pid {$pid}\n";
        return;
    }
    if ($db == "squidlogs") {
        mysqlcheck_squidlogs($table);
        return;
    }
    if (!is_numeric($instance_id)) {
        $instance_id = 0;
    }
    $time1 = time();
    $mysqlcheck = $unix->find_program("mysqlcheck");
    $q = new mysql();
    $pass = null;
    if ($q->mysql_password != null) {
        $pass = "******";
    }
    $cmd = "{$mysqlcheck} -r {$db} {$table} -u {$q->mysql_admin} {$pass} 2>&1";
    if ($instance_id > 0) {
        $q = new mysql_multi($instance_id);
        $cmd = "{$mysqlcheck} -r {$db} {$table} -u {$q->mysql_admin} {$pass} --socket=\"{$q->SocketPath}\" 2>&1";
    }
    exec($cmd, $results);
    $time_duration = distanceOfTimeInWords($time1, time());
    $q->QUERY_SQL("OPTIMIZE TABLE `{$table}`", $db);
    if (!$q->ok) {
        $OPT = "\nOptimize:{$q->mysql_error}\n";
    } else {
        $OPT = "\nOptimize: Success...\n";
    }
    $unix->send_email_events("mysqlcheck results on instance {$instance_id} {$db}/{$table}", "{$time_duration}\n" . @implode("\n", $results) . $OPT, "system");
}
Exemple #7
0
function Add_DB_save()
{
    $q = new mysql();
    if (is_numeric($_POST["instance-id"]) && $_POST["instance-id"] > 0) {
        $q = new mysql_multi($_POST["instance-id"]);
    }
    $sql = "CREATE DATABASE `{$_POST["Add-DB-save"]}`";
    if (!$q->EXECUTE_SQL($sql)) {
        echo "{$_POST["Add-DB-save"]}\n\n{$q->mysql_error}";
        return;
    }
}
function LinkUser()
{
    $q = new mysql();
    if ($_POST["instance-id"] > 0) {
        $q = new mysql_multi($_POST["instance-id"]);
    }
    $databasename = $_POST["databasename"];
    $User = base64_decode($_POST["user"]);
    if (preg_match("#(.+?)@(.+)#", $User, $re)) {
        $uid = $re[1];
        $dom = $re[2];
    }
    $sql = "INSERT IGNORE INTO `db` (`Host`, `Db`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, \n\t`Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Create_view_priv`,\n\t `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Execute_priv`, `Event_priv`, `Trigger_priv`) VALUES\n('{$dom}', '{$databasename}', '{$uid}', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N');";
    $OrginalPassword = $q->mysql_password;
    if (!$q->QUERY_SQL($sql, "mysql")) {
        $q->mysql_admin = "root";
        $q->mysql_password = $OrginalPassword;
        if (!$q->QUERY_SQL($sql, "mysql")) {
            $q->mysql_admin = "root";
            $q->mysql_password = null;
            if (!$q->QUERY_SQL($sql, "mysql")) {
                echo "GRANT SELECT user:{$uid}\nHost:{$dom}\n\n{$q->mysql_error}";
                return;
            }
        }
    }
}
function user_priv()
{
    $admin["Select_priv"] = true;
    $admin["Insert_priv"] = true;
    $admin["Update_priv"] = true;
    $admin["Delete_priv"] = true;
    $admin["Create_priv"] = true;
    $admin["Drop_priv"] = true;
    $admin["Grant_priv"] = true;
    $admin["References_priv"] = true;
    $admin["Index_priv"] = true;
    $admin["Alter_priv"] = true;
    $admin["Create_tmp_table_priv"] = true;
    $admin["Lock_tables_priv"] = true;
    $admin["Create_view_priv"] = true;
    $admin["Show_view_priv"] = true;
    $admin["Create_view_priv"] = true;
    $write["Insert_priv"] = true;
    $write["Update_priv"] = true;
    $write["Delete_priv"] = true;
    $write["Create_priv"] = true;
    $write["Drop_priv"] = true;
    $write["Index_priv"] = true;
    $write["Alter_priv"] = true;
    $write["Create_tmp_table_priv"] = true;
    $write["Create_view_priv"] = true;
    $write["Show_view_priv"] = true;
    $databasename = $_POST["databasename"];
    $User = base64_decode($_POST["user"]);
    $instance_id = $_POST["instance-id"];
    $type = $_POST["type"];
    if (preg_match("#(.+?)@(.+)#", $User, $re)) {
        $uid = $re[1];
        $dom = $re[2];
    }
    while (list($num, $none) = each($admin)) {
        $tt[] = "`{$num}`='N'";
    }
    reset($admin);
    $sql = "UPDATE `db` SET " . @implode(",", $tt) . " WHERE `Host`='{$dom}' AND `Db`='{$databasename}' AND `User`='{$uid}'";
    $tt = array();
    $q = new mysql();
    if ($instance_id > 0) {
        $q = new mysql_multi($instance_id);
    }
    $OrginalPassword = $q->mysql_password;
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    if (!$q->QUERY_SQL($sql, "mysql")) {
        $q->mysql_admin = "root";
        $q->mysql_password = $OrginalPassword;
        $q->ok = true;
        if (!$q->QUERY_SQL($sql, "mysql")) {
            $q->mysql_admin = "root";
            $q->mysql_password = null;
            $q->ok = true;
            if (!$q->QUERY_SQL($sql, "mysql")) {
                echo "user:{$uid}\nHost:{$dom}\n\n{$q->mysql_error}\n{$sql}";
                return;
            }
        }
    }
    if ($type == "a" && $_POST["enable"] == 1) {
        while (list($num, $none) = each($admin)) {
            $tt[] = "`{$num}`='Y'";
        }
        $sql = "UPDATE `db` SET " . @implode(",", $tt) . " WHERE `Host`='{$dom}' AND `Db`='{$databasename}' AND `User`='{$uid}'";
        writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
        if (!$q->QUERY_SQL($sql, "mysql")) {
            $q->mysql_admin = "root";
            $q->mysql_password = $OrginalPassword;
            $q->ok = true;
            if (!$q->QUERY_SQL($sql, "mysql")) {
                $q->mysql_admin = "root";
                $q->mysql_password = null;
                $q->ok = true;
                if (!$q->QUERY_SQL($sql, "mysql")) {
                    echo "user:{$uid}\nHost:{$dom}\n\n{$q->mysql_error}\n{$sql}";
                    return;
                }
            }
        }
        return;
    }
    if ($type == "w" && $_POST["enable"] == 1) {
        $tt = array();
        while (list($num, $none) = each($write)) {
            $tt[] = "`{$num}`='Y'";
        }
        $sql = "UPDATE `db` SET " . @implode(",", $tt) . " WHERE `Host`='{$dom}' AND `Db`='{$databasename}' AND `User`='{$uid}'";
        writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
        if (!$q->QUERY_SQL($sql, "mysql")) {
            $q->mysql_admin = "root";
            $q->mysql_password = $OrginalPassword;
            $q->ok = true;
            if (!$q->QUERY_SQL($sql, "mysql")) {
                $q->mysql_admin = "root";
                $q->mysql_password = null;
                $q->ok = true;
                if (!$q->QUERY_SQL($sql, "mysql")) {
                    echo "user:{$uid}\nHost:{$dom}\n\n{$q->mysql_error}\n{$sql}";
                    return;
                }
            }
        }
        return;
    }
    if ($type == "r" && $_POST["enable"] == 1) {
        $tt = array();
        $sql = "UPDATE `db` SET `Select_priv`='Y' WHERE `Host`='{$dom}' AND `Db`='{$databasename}' AND `User`='{$uid}'";
        writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
        if (!$q->QUERY_SQL($sql, "mysql")) {
            $q->mysql_admin = "root";
            $q->mysql_password = $OrginalPassword;
            $q->ok = true;
            if (!$q->QUERY_SQL($sql, "mysql")) {
                $q->mysql_admin = "root";
                $q->mysql_password = null;
                $q->ok = true;
                if (!$q->QUERY_SQL($sql, "mysql")) {
                    echo "user:{$uid}\nHost:{$dom}\n\n{$q->mysql_error}\n{$sql}";
                    return;
                }
            }
        }
        return;
    }
}
Exemple #10
0
function backupsite($servername)
{
    $unix = new unix();
    $free = new freeweb($servername);
    $tempdir = "/var/tmp/webget/{$servername}";
    $targetpackage = dirname(__FILE__) . "/ressources/logs/web/{$servername}.tar.gz";
    if (is_file($targetpackage)) {
        @unlink($targetpackage);
    }
    writelogs("[{$servername}] Starting backup this website", __FUNCTION__, __FILE__, __LINE__);
    $date_start = time();
    if (!is_dir("{$free->WORKING_DIRECTORY}")) {
        writelogs("[{$servername}] Directory:`{$free->WORKING_DIRECTORY}` no such directory", __FUNCTION__, __FILE__, __LINE__);
        return;
    }
    @mkdir($tempdir, 0755, true);
    writelogs("[{$servername}] Copy website content to {$tempdir}", __FUNCTION__, __FILE__, __LINE__);
    $cp = $unix->find_program("cp");
    $rm = $unix->find_program("rm");
    writelogs("[{$servername}] Copy website {$free->WORKING_DIRECTORY} content to {$tempdir}...", __FUNCTION__, __FILE__, __LINE__);
    writelogs("[{$servername}] Copy Configuration File {$tempdir}/artica.restore...", __FUNCTION__, __FILE__, __LINE__);
    @file_put_contents("{$tempdir}/artica.restore", $free->BackupConfig());
    shell_exec("{$cp} -rf {$free->WORKING_DIRECTORY}/* {$tempdir}/");
    writelogs("[{$servername}] Copy website {$free->WORKING_DIRECTORY} content to {$tempdir} done...", __FUNCTION__, __FILE__, __LINE__);
    if ($free->mysql_database != null) {
        $q = new mysql();
        if ($free->mysql_instance_id > 0) {
            $q = new mysql_multi($free->mysql_instance_id);
        }
        if (!$q->DATABASE_EXISTS($free->mysql_database)) {
            writelogs("[{$servername}] {$free->mysql_database} no such database", __FUNCTION__, __FILE__, __LINE__);
            $date_end = time();
            backupsite_compress($tempdir, $targetpackage);
            $calculate = $unix->distanceOfTimeInWords($date_start, $date_end);
            writelogs("[{$servername}] done...time: {$calculate}", __FUNCTION__, __FILE__, __LINE__);
            return;
        }
        backupsite_mysql_database_mysqldump($free->mysql_database, $tempdir . "/MySQL", $free->mysql_instance_id, $servername);
    }
    backupsite_compress($tempdir, $targetpackage);
    $date_end = time();
    $calculate = $unix->distanceOfTimeInWords($date_start, $date_end);
    writelogs("[{$tempdir}] done...time: {$calculate}", __FUNCTION__, __FILE__, __LINE__);
    if (!is_file($targetpackage)) {
        writelogs("[{$tempdir}] failed, {$targetpackage} no such file", __FUNCTION__, __FILE__, __LINE__);
        return;
    }
    @chmod($targetpackage, 0755);
    if (is_dir($tempdir)) {
        writelogs("[{$tempdir}] cleaning...", __FUNCTION__, __FILE__, __LINE__);
        shell_exec("{$rm} -rf {$tempdir}");
    }
}
function ChangeRoot($instance_id)
{
    echo "Loading instance {$instance_id}\n";
    $mysqld = new mysqlserver_multi($instance_id);
    $username = $mysqld->mysql_admin;
    $password = $mysqld->mysql_password;
    if ($password == null) {
        echo "Password is null, aborting\n";
        return;
    }
    $unix = new unix();
    $mysqld_safe = $unix->find_program("mysqld_safe");
    $nohup = $unix->find_program("nohup");
    $killbin = $unix->find_program("kill");
    echo "mysqld_safe:{$mysqld_safe}\n";
    $ini = new Bs_IniHandler();
    $ini->loadFile("/etc/mysql-multi.cnf");
    $array = $ini->_params["mysqld{$instance_id}"];
    $datadir = $ini->get("mysqld{$instance_id}", "datadir");
    while (list($key, $value) = each($array)) {
        $tt[] = "{$key} = {$value}";
    }
    $newconfig = "[mysqld]\n" . @implode("\n", $tt) . "\n";
    @file_put_contents("/etc/mysql-temp-{$instance_id}.cf", $newconfig);
    for ($i = 0; $i < 5; $i++) {
        $pid = multi_get_pid($instance_id);
        if ($pid > 0) {
            echo "Stopping mysqld safe pid:{$pid}\n";
            unix_system_kill_force($pid);
            sleep(1);
        } else {
            break;
        }
    }
    echo "Stopping instance {$instance_id}\n";
    //shell_exec($unix->LOCATE_PHP5_BIN()." /usr/share/artica-postfix/exec.mysql.build.php --multi-stop $instance_id >/dev/null 2>&1");
    for ($i = 0; $i < 5; $i++) {
        $pid = multi_get_pidNormal($instance_id);
        if ($pid > 0) {
            echo "Stopping mysqld pid:{$pid}\n";
            unix_system_kill_force($pid);
            sleep(1);
        } else {
            break;
        }
    }
    $pid = @file_get_contents("/var/run/mysqld/mysqld{$instance_id}.pid");
    if ($unix->process_exists($pid)) {
        echo "Stopping instance {$instance_id} failed...\n";
        return;
    }
    echo "Running instance {$instance_id} in safe mode...\n";
    if (file_exists("{$datadir}/error.log")) {
        @unlink("{$datadir}/error.log");
    }
    $cmd = "{$nohup} {$mysqld_safe} --defaults-file=/etc/mysql-temp-{$instance_id}.cf --datadir=\"{$datadir}\" --skip-grant-tables --skip-networking --skip-external-locking --log-error=\"{$datadir}/error.log\" --pid-file=/var/run/mysqld/mysqld{$instance_id}.pid >/dev/null 2>&1 &";
    if ($GLOBALS["VERBOSE"]) {
        echo "{$cmd}\n";
    }
    shell_exec($cmd);
    for ($i = 0; $i < 4; $i++) {
        sleep(1);
        $pid = @file_get_contents("/var/run/mysqld/mysqld{$instance_id}.pid");
        if ($unix->process_exists($pid)) {
            sleep(1);
            break;
        }
    }
    $pid = @file_get_contents("/var/run/mysqld/mysqld{$instance_id}.pid");
    if (!$unix->process_exists($pid)) {
        echo "Failed to run mysqld safe\n";
        if (file_exists("{$datadir}/error.log")) {
            echo @file_get_contents("{$datadir}/error.log");
        }
        shell_exec($nohup . " " . $unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.mysql.build.php --multi-start {$instance_id} >/dev/null 2>&1 &");
        return;
    }
    $q = new mysql_multi($instance_id);
    $ligne = mysql_fetch_array($q->QUERY_SQL("SELECT User from user WHERE User='******' LIMIT 0,1", "mysql"));
    if (!$q->ok) {
        echo $q->mysql_error . "\n";
    }
    echo "User:{$username} = {$ligne["User"]}\n";
    if ($ligne["User"] != null) {
        echo "User: Already exists, update password\n";
        $sqlstring = "UPDATE user SET password=PASSWORD(\"{$password}\") WHERE user=\"{$username}\"";
        $q->QUERY_SQL($sqlstring, "mysql");
        if (!$q->ok) {
            echo $q->mysql_error . "\n";
        }
        $q->QUERY_SQL_NO_BASE("FLUSH PRIVILEGES");
        if (!$q->ok) {
            echo $q->mysql_error . "\n";
        }
    } else {
        echo "Root: did not exists, Create a new one...\n";
        $q->QUERY_SQL_NO_BASE("create user root@localhost");
        $q->QUERY_SQL_NO_BASE("GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' with grant option");
        $q->QUERY_SQL_NO_BASE("FLUSH PRIVILEGES");
    }
    echo "Stopping mysqld safe....\n";
    for ($i = 0; $i < 5; $i++) {
        $pid = multi_get_pid($instance_id);
        if ($pid > 0) {
            echo "Stopping mysqld safe pid:{$pid}\n";
            unix_system_kill_force($pid);
            sleep(1);
        } else {
            break;
        }
    }
    exec($unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.mysql.build.php --multi-stop {$instance_id} 2>&1", $results);
    while (list($key, $value) = each($results)) {
        echo "{$value}\n";
    }
    $results = array();
    echo "Start mysqld in normal mode\n";
    exec($unix->LOCATE_PHP5_BIN() . " /usr/share/artica-postfix/exec.mysql.build.php --multi-start {$instance_id} 2>&1", $results);
    while (list($key, $value) = each($results)) {
        echo "{$value}\n";
    }
}
function perform_db_backup($InstanceID, $database, $targetDir, $compress)
{
    $unix = new unix();
    $piped = null;
    if (isset($GLOBALS["ALREADY{$InstanceID}{$database}"])) {
        return;
    }
    $GLOBALS["ALREADY{$InstanceID}{$database}"] = true;
    $targetFilename = $targetDir . "/" . date("Y-m-d") . ".{$database}.sql";
    $logfile = "/var/log/dump.{$database}.log";
    if (!is_dir($targetDir)) {
        system_admin_events("{$database}:[{$InstanceID}]:{$targetDir} no such directory", __FUNCTION__, __FILE__, __LINE__, "backup");
        return false;
    }
    $t = time();
    @file_put_contents("{$targetDir}/{$t}", time());
    if (!is_file("{$targetDir}/{$t}")) {
        system_admin_events("{$database}:[{$InstanceID}]:{$targetDir} permission denied", __FUNCTION__, __FILE__, __LINE__, "backup");
        return false;
    }
    @unlink("{$targetDir}/{$t}");
    if (!is_numeric($InstanceID)) {
        $InstanceID = 0;
    }
    $mysqldump = $unix->find_program("mysqldump");
    if (!is_file($mysqldump)) {
        system_admin_events("{$database}:[{$InstanceID}]:mysqldump no such binary", __FUNCTION__, __FILE__, __LINE__, "backup");
        return false;
    }
    if ($compress == 1) {
        $gzip = $unix->find_program("gzip");
        if (!is_file($gzip)) {
            system_admin_events("{$database}:[{$InstanceID}]:gzip no such binary", __FUNCTION__, __FILE__, __LINE__, "backup");
            return false;
        }
        $piped = " |{$gzip} -9 >";
        $targetFilename = $targetFilename . ".gz";
    }
    if (is_file($targetFilename)) {
        $size = filesize($targetFilename);
        system_admin_events("{$database}:[{$InstanceID}]: {$targetFilename} already exists ( {$size} bytes)...", __FUNCTION__, __FILE__, __LINE__, "backup");
        return false;
    }
    $password = null;
    $options = "--add-drop-database --opt --delayed-insert --skip-lock-table --log-error={$logfile}";
    $q = new mysql();
    if ($q->mysql_password != null) {
        $q->mysql_password = $unix->shellEscapeChars($q->mysql_password);
        $password = "******";
    }
    if ($q->mysql_server == "127.0.0.1") {
        $servcmd = " --socket=/var/run/mysqld/mysqld.sock ";
    } else {
        $servcmd = " --host={$q->mysql_server} --port={$q->mysql_port} ";
    }
    $cmdline = "{$mysqldump} -u {$q->mysql_admin}{$password} {$servcmd} {$options} {$database}{$piped} \"{$targetFilename}\" 2>&1";
    $cmdlineTXT = str_replace($q->mysql_password, "****", $cmdline);
    if ($InstanceID > 0) {
        $q = new mysql_multi($InstanceID);
        if ($q->mysql_password != null) {
            $q->mysql_password = $unix->shellEscapeChars($q->mysql_password);
            $password = "******";
        }
        $cmdline = "{$mysqldump} -u {$q->mysql_admin}{$password} --socket={$q->SocketPath} {$options} {$database}{$piped} \"{$targetFilename}\" 2>&1";
        $cmdlineTXT = str_replace($q->mysql_password, "****", $cmdline);
    }
    if (is_file($logfile)) {
        @unlink($logfile);
    }
    if ($GLOBALS["VERBOSE"]) {
        echo "{$cmdline}\n";
    }
    $t = time();
    shell_exec($cmdline);
    $took = $unix->distanceOfTimeInWords($t, time(), true);
    $size = filesize($targetFilename);
    $sizeH = FormatBytes($size / 1024);
    $mysqllog = @file_get_contents($logfile);
    $md5 = md5("{$database}{$InstanceID}");
    $date = date('Y-m-d');
    $q->QUERY_SQL("DELETE FROM mysqldb_backup_containers WHERE `fullpath`='{$targetFilename}'", "artica_backup");
    $sql = "INSERT IGNORE INTO mysqldb_backup_containers (`md5`,`fullpath`,`duration`,`zDate`,`size`) VALUES ('{$md5}','{$targetFilename}','{$took}','{$date}','{$size}')";
    $q = new mysql();
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        system_admin_events("{$database}:[{$InstanceID}]: {$q->mysql_error}\n{$sql}", __FUNCTION__, __FILE__, __LINE__, "backup");
    }
    system_admin_events("{$database}:[{$InstanceID}]: backup success took {$took}, size:{$sizeH}\n{$cmdlineTXT}\n{$mysqllog}", __FUNCTION__, __FILE__, __LINE__, "backup");
}
function rows_list_json()
{
    $search = $_GET["search"];
    $MyPage = CurrentPageName();
    $page = 1;
    $users = new usersMenus();
    $tpl = new templates();
    $sock = new sockets();
    $q = new mysql();
    $table = $_GET["table"];
    $tableOrg = $table;
    $database = $_GET["database"];
    $fields = unserialize(base64_decode($_GET["fields"]));
    $sqlQuery = base64_decode($_GET["sql"]);
    $instance_id = $_GET["instance-id"];
    if (!is_numeric($instance_id)) {
        $instance_id = 0;
    }
    if ($instance_id > 0) {
        $q = new mysql_multi($instance_id);
    }
    if (!is_array($fields)) {
        json_error_show("Fields is empty {$_GET["fields"]}");
    }
    $t = $_GET["t"];
    if ($q->COUNT_ROWS($table, $database) == 0) {
        json_error_show("{$table} is empty");
    }
    if ($sqlQuery != null) {
        $table = "({$sqlQuery}) as tt";
    }
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if ($_POST["query"] != null) {
        $_POST["query"] = str_replace("*", "%", $_POST["query"]);
        $search = $_POST["query"];
        $searchstring = "AND (`{$_POST["qtype"]}` LIKE '{$search}')";
        $sql = "SELECT COUNT(*) as TCOUNT FROM {$table} WHERE 1 {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, $database));
        if (!$q->ok) {
            json_error_show("{$q->mysql_error}");
        }
        $total = $ligne["TCOUNT"];
        if ($total == 0) {
            json_error_show("No rows {$sql}");
        }
    } else {
        if ($sqlQuery != null) {
            $sql = "SELECT COUNT(*) as TCOUNT FROM {$table}";
            $ligne = mysql_fetch_array($q->QUERY_SQL($sql, $database));
            $total = $ligne["TCOUNT"];
        } else {
            $total = $q->COUNT_ROWS($table, $database);
        }
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    if ($OnlyEnabled) {
        $limitSql = null;
    }
    if ($sqlQuery != null) {
        $sql = $sqlQuery . " {$searchstring} {$FORCE_FILTER} {$ORDER} {$limitSql}";
    } else {
        $sql = "SELECT *  FROM {$tableOrg} WHERE 1 {$searchstring} {$FORCE_FILTER} {$ORDER} {$limitSql}";
    }
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $results = $q->QUERY_SQL($sql, $database);
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (mysql_num_rows($results) == 0) {
        json_error_show("Query return empty array, {$sql}, ({$q->mysql_error})");
    }
    $ldap = new clladp();
    while ($ligne = mysql_fetch_assoc($results)) {
        reset($fields);
        $cells = array();
        while (list($key, $line) = each($fields)) {
            $cellencoded = base64_encode($ligne[$key]);
            $cells[] = "<a href=\"javascript:blur();\" Onclick=\"javascript:Loadjs('admin.index.php?json-error-js={$cellencoded}');\">{$ligne[$key]}</a>";
        }
        $data['rows'][] = array('id' => md5(serialize($ligne)), 'cell' => $cells);
    }
    echo json_encode($data);
}
function databases_list_json()
{
    $search = $_GET["search"];
    $MyPage = CurrentPageName();
    $page = 1;
    $users = new usersMenus();
    $tpl = new templates();
    $sock = new sockets();
    $q = new mysql();
    $table = "(SELECT CONCAT( table_schema, '/', table_name ) as xTables , CONCAT( ROUND( table_rows /1000000, 2 ) , 'M' ) ROWS ,\n\tCONCAT( ROUND( data_length / ( 1024 *1024 *1024 ) , 2 ) , 'G' ) DATA, \n\tCONCAT( ROUND( index_length / ( 1024 *1024 *1024 ) , 2 ) , 'G' ) idx, \n\tCONCAT( ROUND( ( data_length + index_length ) / ( 1024 *1024 *1024 ) , 2 ) , 'G' ) total_size, \n\tROUND( index_length / data_length, 2 ) idxfrac FROM information_schema.TABLES ORDER BY data_length + index_length) as t";
    if ($_GET["instance-id"] > 0) {
        $q = new mysql_multi($_GET["instance-id"]);
    }
    $database = "mysql";
    $t = $_GET["t"];
    //if($q->COUNT_ROWS($table,$database)==0){json_error_show("$table is empty");}
    if (isset($_POST["sortname"])) {
        if ($_POST["sortname"] != null) {
            $ORDER = "ORDER BY {$_POST["sortname"]} {$_POST["sortorder"]}";
        }
    }
    if (isset($_POST['page'])) {
        $page = $_POST['page'];
    }
    if ($_POST["query"] != null) {
        $_POST["query"] = str_replace("*", "%", $_POST["query"]);
        $search = $_POST["query"];
        $searchstring = "AND (`{$_POST["qtype"]}` LIKE '{$search}')";
        $sql = "SELECT COUNT(*) as TCOUNT FROM {$table} WHERE {$FORCE_FILTER} {$searchstring}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, $database));
        if (!$q->ok) {
            json_error_show("{$q->mysql_error}<br>Line:" . __LINE__);
        }
        $total = $ligne["TCOUNT"];
    } else {
        $sql = "SELECT COUNT(*) as TCOUNT FROM {$table}";
        $ligne = mysql_fetch_array($q->QUERY_SQL($sql, $database));
        if (!$q->ok) {
            json_error_show("{$q->mysql_error}<br>Line:" . __LINE__);
        }
        $total = $ligne["TCOUNT"];
    }
    if (isset($_POST['rp'])) {
        $rp = $_POST['rp'];
    }
    $pageStart = ($page - 1) * $rp;
    $limitSql = "LIMIT {$pageStart}, {$rp}";
    if ($OnlyEnabled) {
        $limitSql = null;
    }
    $sql = "SELECT *  FROM {$table} WHERE  1 {$searchstring} {$ORDER} {$limitSql}";
    writelogs($sql, __FUNCTION__, __FILE__, __LINE__);
    $results = $q->QUERY_SQL($sql, $database);
    if (!$q->ok) {
        json_error_show("Query return an error<hr>{$sql}<hr>({$q->mysql_error})");
    }
    $data = array();
    $data['page'] = $page;
    $data['total'] = $total;
    $data['rows'] = array();
    if (mysql_num_rows($results) == 0) {
        json_error_show("Query return empty array, {$sql}, ({$q->mysql_error})");
    }
    while ($ligne = mysql_fetch_assoc($results)) {
        $tablename = $ligne["xTables"];
        $r = explode("/", $tablename);
        $table = $r[1];
        $db = $r[0];
        $md5S = md5($tablename);
        $js = "Loadjs('mysql.browse.table.php?table={$table}&database={$db}&instance-id={$_GET["instance-id"]}');";
        $href = "<a href=\"javascript:blur();\" OnClick=\"javascript:{$js}\" style='text-decoration:underline'>";
        $spanStyle1 = "<span style='font-size:13px;font-weight:bold;color:#5F5656;'>";
        $data['rows'][] = array('id' => $md5S, 'cell' => array("<strong style='font-size:14px;style='color:{$color}'>{$href}{$tablename}</a></strong>", "{$spanStyle1}{$ligne["ROWS"]}</span>", "{$spanStyle1}{$ligne["idx"]}</span>", "{$spanStyle1}{$ligne["total_size"]}</span>", "{$spanStyle1}{$ligne["idxfrac"]}</span>"));
    }
    echo json_encode($data);
}
function multi_delete($ID)
{
    $unix = new unix();
    $rm = $unix->find_program("rm");
    echo "Deleting......: zarafa-server instance id:{$ID}..\n";
    echo "Deleting......: zarafa-server disable instance\n";
    $q = new mysql();
    $q->QUERY_SQL("UPDATE zarafamulti SET enabled=0 WHERE ID='{$ID}'", "artica_backup");
    echo "Deleting......: zarafa-server stopping instance\n";
    multi_stop($ID);
    $zarafa = new zarafamulti($ID);
    echo "Deleting......: zarafa-server removing directory {$zarafa->attachment_path}\n";
    if (is_dir($zarafa->attachment_path)) {
        recursive_remove_directory($zarafa->attachment_path);
    }
    echo "Deleting......: zarafa-server removing directory /etc/zarafa-{$ID}\n";
    if (is_dir("/etc/zarafa-{$ID}")) {
        recursive_remove_directory("/etc/zarafa-{$ID}");
    }
    $database = "zarafa{$ID}";
    echo "Deleting......: zarafa-server removing database {$database}\n";
    if ($zarafa->mysql_instance_id > 0) {
        $q = new mysql_multi($zarafa->mysql_instance_id);
        $q->QUERY_SQL_NO_BASE("DROP DATABASE `{$database}`");
    } else {
        $q = new mysql();
        $q->DELETE_DATABASE($database);
    }
    echo "Deleting......: zarafa-server removing entry\n";
    $q = new mysql();
    $q->QUERY_SQL("DELETE FROM zarafamulti WHERE ID={$ID}", "artica_backup");
    if ($zarafa->PostfixInstance != null) {
        echo "Deleting......: zarafa-server reconfigure {$zarafa->PostfixInstance} postfix instance \n";
        $sock = new sockets();
        $sock->getFrameWork("postfix.php?reconfigure-single-instance={$zarafa->PostfixInstance}");
    }
    echo "Deleting......: zarafa-server done...\n";
}