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%> </th>\n\t\t<th width=99%> </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 = " "; } 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); }
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__); }
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"); }
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); }
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"); }
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; } }
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"; }