Example #1
0
<?php

if ($_SESSION["logged_in"]) {
    $vps = vps_load($_GET["veid"]);
    if ($vps->exists) {
        if ($session = $vps->create_console_session()) {
            $xtpl->perex(_('Remote Console for VPS #' . $vps->veid), '
				<iframe src="' . $vps->get_console_server() . '/console/' . $vps->veid . '?session=' . $session . '" width="100%" height="500px" border="1"></iframe>
			');
            $xtpl->assign('AJAX_SCRIPT', $xtpl->vars['AJAX_SCRIPT'] . '
<script type="text/javascript">
function ajax_vps(cmd) {
	$.get("ajax.php?page=vps&action=" + cmd + "&veid=' . $vps->veid . '");
}
</script>
');
            $xtpl->sbar_add('<img src="template/icons/vps_start.png"  title="' . _("Start") . '" /> ' . _("Start"), "javascript:ajax_vps('start');");
            $xtpl->sbar_add('<img src="template/icons/vps_stop.png"  title="' . _("Stop") . '" /> ' . _("Stop"), "javascript:ajax_vps('stop');");
            $xtpl->sbar_add('<img src="template/icons/vps_restart.png"  title="' . _("Restart") . '" /> ' . _("Restart"), "javascript:ajax_vps('restart');");
            $xtpl->sbar_out(_("Manage VPS"));
        } else {
            $xtpl->perex(_("Failed to create session"), '');
        }
    } else {
        $xtpl->perex(_("Access forbidden"), _("You have no access to this VPS."));
    }
} else {
    $xtpl->perex(_("Access forbidden"), _("You have to log in to be able to access vpsAdmin's functions"));
}
Example #2
0
    function clone_vps($m_id, $server_id, $hostname, $configs, $features, $backuper)
    {
        global $db;
        $sql = 'INSERT INTO vps
			SET m_id = "' . $db->check($m_id) . '",
				vps_created = "' . $db->check(time()) . '",
				vps_template = "' . $db->check($this->ve["vps_template"]) . '",
				vps_info ="' . $db->check("Cloned from {$this->veid}") . '",
				vps_hostname ="' . $db->check($hostname) . '",
				dns_resolver_id ="' . $db->check($this->ve["dns_resolver_id"]) . '",
				vps_server ="' . $db->check($server_id) . '",
				vps_onboot ="' . $db->check($this->ve["vps_onboot"]) . '",
				vps_onstartall = ' . $db->check($this->ve["vps_onstartall"]) . ',
				vps_features_enabled = ' . $db->check($features ? $this->ve["vps_features_enabled"] : 0) . ',
				vps_backup_enabled = ' . $db->check($backuper ? $this->ve["vps_backup_enabled"] : 1) . ',
				vps_backup_exclude = "' . $db->check($backuper ? $this->ve["vps_backup_exclude"] : '') . '",
				vps_config = "' . $db->check($configs ? $this->ve["vps_config"] : '') . '"';
        $db->query($sql);
        $clone = vps_load($db->insert_id());
        $src_node = new cluster_node($this->ve["vps_server"]);
        $dst_node = new cluster_node($server_id);
        $params = array("src_veid" => $this->veid, "src_addr" => $this->ve["server_ip4"], "src_node_type" => $src_node->role["fstype"], "dst_node_type" => $dst_node->role["fstype"]);
        add_transaction($_SESSION["member"]["m_id"], $server_id, $clone->veid, $server_id == $this->ve["vps_server"] ? T_CLONE_VE_LOCAL : T_CLONE_VE_REMOTE, $params);
        switch ($configs) {
            case 0:
                $clone->add_default_configs("default_config_chain");
                break;
            case 1:
                $db->query("INSERT INTO vps_has_config (vps_id, config_id, `order`) SELECT '" . $db->check($clone->veid) . "' AS vps_id, config_id, `order` FROM vps_has_config WHERE vps_id = '" . $db->check($this->veid) . "'");
                if ($clone->ve["vps_config"]) {
                    $clone->update_custom_config($clone->ve["vps_config"]);
                } else {
                    $clone->applyconfigs();
                }
                break;
            case 2:
                $clone->add_default_configs("playground_default_config_chain");
                break;
        }
        // Clone mounts - exports are the same, except backup, that must be created
        $db->query("INSERT INTO vps_mount (vps_id, src, dst, mount_opts, umount_opts, type, server_id, storage_export_id, mode, cmd_premount, cmd_postmount, cmd_preumount, cmd_postumount)\n\t            SELECT " . $clone->veid . " AS vps_id, src, dst, mount_opts, umount_opts, type, server_id, storage_export_id, mode, cmd_premount, cmd_postmount, cmd_preumount, cmd_postumount\n\t            FROM vps_mount\n\t            WHERE vps_id = " . $db->check($this->veid));
        $def_exports = nas_list_default_exports("vps");
        $cloned_backup_export = 0;
        foreach ($def_exports as $e) {
            if ($e["export_type"] == "backup") {
                $cloned_backup_export = nas_export_add($clone->ve["m_id"], $e["root_id"], nas_resolve_vars($e["dataset"], $clone->ve), nas_resolve_vars($e["path"], $clone->ve), $e["export_quota"], $e["user_editable"], $e["export_type"]);
                break;
            }
        }
        if ($cloned_backup_export) {
            $db->query("UPDATE vps_mount SET storage_export_id = " . $db->check($cloned_backup_export) . "\n\t\t            WHERE vps_id = " . $db->check($clone->veid) . " AND storage_export_id = " . $db->check($this->ve["vps_backup_export"]));
            $clone->set_backuper(NULL, $cloned_backup_export, false, true);
        }
        $clone->mount_regen();
        $clone->set_hostname($hostname);
        if ($features && $this->ve["vps_features_enabled"]) {
            add_transaction($_SESSION["member"]["m_id"], $server_id, $clone->veid, T_ENABLE_FEATURES);
        }
        $this->info();
        if ($this->ve["vps_up"]) {
            $clone->start();
        }
        return $clone;
    }
Example #3
0
function request_approve()
{
    global $db;
    if (!$_SESSION["is_admin"]) {
        return;
    }
    $row = request_by_id($_GET["id"]);
    if (!$row) {
        return;
    } elseif ($row["m_state"] == "approved") {
        notify_user(_("Request has already been approved"), '');
        redirect('?page=adminm&section=members&action=request_details&id=' . $row["m_id"]);
        return;
    }
    $data = null;
    $mail = false;
    if (isset($_POST["m_name"])) {
        // called from request details
        $data = $_POST;
    } else {
        // accessed from request list or mail
        $data = $row;
        $mail = true;
    }
    switch ($row["m_type"]) {
        case "add":
            if (!validate_username($data["m_nick"])) {
                notify_user(_("User with this login already exists."), '');
                redirect('?page=adminm&section=members&action=request_details&id=' . $row["m_id"]);
            }
            $data["m_level"] = PRIV_USER;
            $data["m_playground_enable"] = true;
            $data["m_mailer_enable"] = true;
            $data["m_info"] = "";
            $data["m_pass"] = random_string(10);
            $m = member_load();
            $m_id = $m->create_new($data);
            nas_create_default_exports("member", $m->m);
            if ($mail || $_POST["m_create_vps"]) {
                // create vps
                $server = null;
                if ($_POST["m_node"]) {
                    $server = server_by_id($_POST["m_node"]);
                } else {
                    $server = server_by_id(pick_free_node($data["m_location"]));
                }
                $vps = vps_load();
                $vps->create_new($server["server_id"], $data["m_distribution"], "vps", $m_id, "");
                $mapping = nas_create_default_exports("vps", $vps->ve);
                nas_create_default_mounts($vps->ve, $mapping);
                $vps->add_default_configs("default_config_chain");
                if (!isset($_POST["m_assign_ips"]) || $_POST["m_assign_ips"]) {
                    $vps->add_first_available_ip($server["server_location"], 4);
                    $vps->add_first_available_ip($server["server_location"], 6);
                }
                $vps->start();
            }
            break;
        case "change":
            $db->query("UPDATE members SET\n\t\t\t\t\t\t\tm_name = '" . $db->check($row["m_name"]) . "',\n\t\t\t\t\t\t\tm_mail = '" . $db->check($row["m_mail"]) . "',\n\t\t\t\t\t\t\tm_address = '" . $db->check($row["m_address"]) . "'\n\t\t\t\t\t\tWHERE m_id = " . $db->check($row["m_applicant"]));
            // mail user about the approval
            request_change_mail_member($row, "approved", $row["m_mail"]);
            break;
    }
    $db->query("UPDATE members_changes SET\n\t            m_state = 'approved',\n\t            m_changed_by = " . $db->check($_SESSION["member"]["m_id"]) . ",\n\t            m_admin_response = '" . $db->check($data["m_admin_response"]) . "',\n\t            m_changed_at = " . time() . "\n\t            WHERE m_id = " . $db->check($row["m_id"]));
    $row = request_by_id($_GET["id"]);
    // mail admins about the approval
    request_change_mail_admins($row, "approved");
    request_mail_last_update($row);
    notify_user(_("Request approved"), '');
    redirect('?page=adminm&section=members&action=approval_requests');
}
Example #4
0
         $xtpl->sbar_add('<img src="template/icons/m_add.png"  title="' . _("New VPS") . '" /> ' . _("New VPS"), '?page=adminvps&section=vps&action=new');
         $xtpl->sbar_add('<img src="template/icons/vps_ip_list.png"  title="' . _("List VPSes") . '" /> ' . _("List VPSes"), '?page=adminvps&action=list');
         $xtpl->sbar_add('<img src="template/icons/vps_ip_list.png"  title="' . _("List IP addresses") . '" /> ' . _("List IP addresses"), '?page=adminvps&action=alliplist');
     }
 }
 if (isset($show_info) && $show_info) {
     if (!isset($veid)) {
         $veid = $_GET["veid"];
     }
     if ($_SESSION["is_admin"]) {
         $xtpl->title(_("VPS details") . ' ' . _("[Admin mode]"));
     } else {
         $xtpl->title(_("VPS details") . ' ' . _("[User mode]"));
     }
     if (!$vps->exists) {
         $vps = vps_load($veid);
     }
     $vps->info();
     $xtpl->table_add_category('&nbsp;');
     $xtpl->table_add_category('&nbsp;');
     $xtpl->table_td('ID:');
     $xtpl->table_td($vps->veid);
     $xtpl->table_tr();
     $xtpl->table_td(_("Server") . ':');
     $s = new cluster_node($vps->ve["vps_server"]);
     $xtpl->table_td($s->s["server_name"]);
     $xtpl->table_tr();
     $xtpl->table_td(_("Location") . ':');
     $xtpl->table_td($s->get_location_label());
     $xtpl->table_tr();
     $xtpl->table_td(_("Owner") . ':');
Example #5
0
             } else {
                 if ($_REQUEST["backup_first"] && $last_t["t_time"] > time() - 24 * 60 * 60) {
                     $xtpl->perex(_("Backup before restore not allowed"), _("You can use backup before restore function only once per day."));
                 } else {
                     $xtpl->perex(_("Restoration of VPS") . " {$_GET["vps_id"]} from " . strftime("%Y-%m-%d %H:%M", $_GET["timestamp"]) . " " . strtolower(_("planned")), '');
                     $vps->restore($_GET["timestamp"], $_GET["backup_first"]);
                 }
             }
         }
         break;
     case 'download':
         $vps = vps_load($_GET["vps_id"]);
         $xtpl->perex($_GET["timestamp"] == "current" ? _("Are you sure you want to download current state of VPS?") : _("Are you sure you want to download VPS") . ' ' . $_GET["vps_id"] . ' from ' . strftime("%Y-%m-%d %H:%M", $_GET["timestamp"]) . '?', '<a href="?page=backup">' . strtoupper(_("No")) . '</a> | <a href="?page=backup&action=download2&vps_id=' . $_GET["vps_id"] . '&timestamp=' . $_GET["timestamp"] . '">' . strtoupper(_("Yes")) . '</a>');
         break;
     case 'download2':
         $vps = vps_load($_GET["vps_id"]);
         $xtpl->perex($_GET["timestamp"] == "current" ? _("Download current state of VPS planned") : _("Download of backup from ") . strftime("%Y-%m-%d %H:%M", $_GET["timestamp"]) . " " . strtolower(_("planned")), _("Preparing the archive may take several hours. You will receive email with download link when it is done."));
         $vps->download_backup($_GET["timestamp"]);
         break;
     default:
         $list_backups = true;
 }
 if ($list_backups) {
     $loaded_vps = array();
     if ($_SESSION["is_admin"]) {
         $xtpl->sbar_add(_("<b>DANGEROUS:</b> clean-up all deleted"), '?page=backup&action=cleanup_all');
         $listCond[] = "1";
         if (isset($_GET["vps_id"])) {
             $listCond[] = "vps_id = {$db->check($_GET["vps_id"])}";
         }
         if (isset($_GET["m_id"])) {
Example #6
0
 public function remove_from_vps($ip_id, $vps_id)
 {
     $vps = vps_load($vps_id);
     $ip_addr = $this->get_ip_from_id($ip_id);
     $this->xtpl->perex_cmd_output(_("Deletion of IP planned") . " {$ip_addr}", $vps->ipdel($ip_addr));
 }
Example #7
0
 function save_config($id, $name, $label, $config, $reapply = false)
 {
     global $db;
     $params = array("name" => $name, "config" => $config);
     if ($id != NULL) {
         $sql = "UPDATE `config` SET name = '" . $db->check($name) . "',\n\t\t\t        label = '" . $db->check($label) . "',\n\t\t\t        `config` = '" . $db->check($config) . "'\n\t\t\t        WHERE id = '" . $db->check($id) . "'";
         $c = $db->findByColumnOnce("config", "id", $id);
         if ($c["name"] != $name) {
             $params["old_name"] = $c["name"];
         }
     } else {
         $sql = "INSERT INTO `config` SET name = '" . $db->check($name) . "',\n\t\t\t        label = '" . $db->check($label) . "',\n\t\t\t        `config` = '" . $db->check($config) . "'";
     }
     $db->query($sql);
     $servers = list_servers(false, array('node'));
     foreach ($servers as $sid => $name) {
         add_transaction($_SESSION["member"]["m_id"], $sid, 0, T_CLUSTER_CONFIG_CREATE, $params);
         $dep = $db->insertId();
         if ($reapply) {
             $rs = $db->query("SELECT v.vps_id FROM vps v INNER JOIN vps_has_config c ON v.vps_id = c.vps_id WHERE c.config_id = " . $db->check($id) . " AND vps_server = " . $db->check($sid));
             while ($row = $db->fetch_array($rs)) {
                 $vps = vps_load($row["vps_id"]);
                 $vps->applyconfigs($dep);
             }
         }
     }
 }
Example #8
0
 }
 if (isset($_GET["m"])) {
     $nodes = $db->check(is_array($_GET["m"]) ? implode(",", $_GET["m"]) : $_GET["m"]);
     $conds[] = "(SELECT mo.id FROM vps_mount mo\n\t\t             LEFT JOIN storage_export e ON mo.storage_export_id = e.id\n\t\t             LEFT JOIN storage_root r ON e.root_id = r.id\n\t\t             WHERE mo.vps_id = v.vps_id\n\t\t                   AND (mo.server_id IN (" . $nodes . ") OR r.node_id IN (" . $nodes . "))\n\t                 LIMIT 1) IS NOT NULL";
 }
 if (isset($_GET["c"])) {
     $conds[] = "(SELECT c.vps_id\n\t\t             FROM vps_has_config c\n\t\t             WHERE c.vps_id = v.vps_id\n\t\t                   AND c.config_id IN (" . implode(",", $_GET["c"]) . ")\n\t\t             LIMIT 1) IS NOT NULL";
 }
 $conditions = array();
 foreach ($conds as $c) {
     $conditions[] = "({$c})";
 }
 $sql = "SELECT * FROM vps v\n\t        INNER JOIN vps_status st ON v.vps_id = st.vps_id\n\t        INNER JOIN servers s ON v.vps_server = s.server_id\n\t        INNER JOIN locations l ON s.server_location = l.location_id\n\t        INNER JOIN members m ON v.m_id = m.m_id\n\t        INNER JOIN cfg_templates t ON v.vps_template = t.templ_id\n\t        INNER JOIN cfg_dns dns ON v.dns_resolver_id = dns.dns_id\n\t        " . (count($conditions) > 0 ? "WHERE " . implode(" AND ", $conds) : "") . "\n\t        GROUP BY v.vps_id\n\t        ORDER BY v.vps_id ASC";
 $res = $db->query($sql);
 while ($row = $db->fetch_array($res)) {
     $vps = vps_load($row["vps_id"]);
     $vps->info();
     $xtpl->form_add_checkbox_pure('vpses[]', $vps->veid, true);
     $xtpl->table_td('<a href="?page=adminvps&action=info&veid=' . $vps->veid . '">' . $vps->veid . '</a>');
     $xtpl->table_td('<a href="?page=cluster&action=mass_management&n[]=' . $vps->ve['server_id'] . '">' . $vps->ve["server_name"] . '</a>');
     $xtpl->table_td('<a href="?page=cluster&action=mass_management&o[]=' . $vps->ve['m_id'] . '">' . $vps->ve["m_nick"] . '</a>');
     $xtpl->table_td('<a href="?page=adminvps&action=info&veid=' . $vps->veid . '"><img src="template/icons/vps_edit.png"  title="' . _("Edit") . '"/> ' . $vps->ve["vps_hostname"] . '</a>');
     $xtpl->table_td('<a href="?page=cluster&action=mass_management&t[]=' . $row["templ_id"] . '">' . $row["templ_label"] . '</a>');
     $xtpl->table_td($vps->ve["vps_nproc"], false, true);
     $xtpl->table_td(sprintf('%4d MB', $vps->ve["vps_vm_used_mb"]), false, true);
     if ($vps->ve["vps_disk_used_mb"] > 0) {
         $xtpl->table_td(sprintf('%.2f GB', round($vps->ve["vps_disk_used_mb"] / 1024, 2)), false, true);
     } else {
         $xtpl->table_td('---', false, true);
     }
     $xtpl->table_tr($vps->ve["vps_up"] ? false : '#FFCCCC');
Example #9
0
function do_transaction($t)
{
    // debug
    print_r($t);
    global $db, $firewall, $cluster_cfg, $cluster;
    $ret = false;
    $output[0] = 'SUCCESS';
    if ($t['t_server'] == SERVER_ID && !DEMO_MODE) {
        switch ($t['t_type']) {
            case T_START_VE:
                if ($vps = vps_load($t['t_vps'])) {
                    exec_wrapper(BIN_VZCTL . ' start ' . $db->check($vps->veid), $output, $retval);
                    $ret = $retval == 0;
                }
                break;
            case T_STOP_VE:
                if ($vps = vps_load($t['t_vps'])) {
                    exec_wrapper(BIN_VZCTL . ' stop ' . $db->check($vps->veid), $output, $retval);
                    $ret = $retval == 0;
                }
                break;
            case T_RESTART_VE:
                if ($vps = vps_load($t['t_vps'])) {
                    exec_wrapper(BIN_VZCTL . ' stop ' . $db->check($vps->veid), $output, $retval);
                    if ($retval != 0) {
                        $ret = false;
                    } else {
                        exec_wrapper(BIN_VZCTL . ' start ' . $db->check($vps->veid), $output, $retval);
                        $ret = $retval == 0;
                    }
                }
                break;
            case T_EXEC_LIMITS:
            case T_EXEC_PASSWD:
            case T_EXEC_HOSTNAME:
            case T_EXEC_DNS:
            case T_EXEC_IPADD:
            case T_EXEC_IPDEL:
                if ($vps = vps_load($t['t_vps'])) {
                    exec_wrapper(BIN_VZCTL . ' set ' . $db->check($vps->veid) . ' --save ' . $db->check(unserialize($t['t_param'])), $output, $retval);
                    $ret = $retval == 0;
                }
                break;
            case T_EXEC_OTHER:
                break;
            case T_CREATE_VE:
                $params = unserialize($t['t_param']);
                // download template
                $get_template = get_template($db->check($params['template']));
                if ($get_template == false) {
                    $ret = false;
                    $sql = "delete from vps where vpsid=" . $db->check($t['t_vps']);
                    $db->query($sql);
                    break;
                }
                exec_wrapper(BIN_VZCTL . ' create ' . $db->check($t['t_vps']) . ' --ostemplate ' . $db->check($params['template']) . ' --hostname ' . $db->check($params['hostname']), $output, $retval);
                if ($retval != 0) {
                    $ret = false;
                    $sql = "delete from vps where vpsid=" . $db->check($t['t_vps']);
                    $db->query($sql);
                } else {
                    exec_wrapper(BIN_VZCTL . ' set ' . $db->check($t['t_vps']) . ' --save --nameserver ' . $db->check($params['nameserver']) . ' --onboot yes', $output, $retval);
                    $ret = $retval == 0;
                    // delete template
                    unlink('/vz/template/cache/' . $db->check($params['template']) . '.tar.gz');
                }
                break;
            case T_DESTROY_VE:
                // check if runnig ??
                $run = exec(BIN_VZLIST . ' ' . $db->check($t['t_vps']));
                if (strstr($run, 'running')) {
                    // stop
                    exec_wrapper(BIN_VZCTL . ' stop ' . $t['t_vps'], $output, $retval);
                }
                exec_wrapper(BIN_VZCTL . ' destroy ' . $db->check($t['t_vps']), $output, $retval);
                $ret = $retval == 0;
                break;
            case T_REINSTALL_VE:
                $retval = $retvala = $retvalb = $retvalc = $retvald = 1;
                $params = unserialize($t['t_param']);
                exec_wrapper(BIN_VZCTL . ' stop ' . $t['t_vps'], $output, $retval);
                if ($retval == 0) {
                    exec_wrapper(BIN_VZCTL . ' destroy ' . $db->check($t['t_vps']), $output, $retvala);
                }
                if ($retvala == 0) {
                    exec_wrapper(BIN_VZCTL . ' create ' . $db->check($t['t_vps']) . ' --ostemplate ' . $db->check($params['template']) . ' --hostname ' . $db->check($params['hostname']), $output, $retvalb);
                }
                if ($retvalb == 0) {
                    exec_wrapper(BIN_VZCTL . ' set ' . $db->check($t['t_vps']) . ' --save --nameserver ' . $db->check($params['nameserver']) . ' --onboot yes', $output, $retvalc);
                }
                if ($retvalc == 0) {
                    exec_wrapper(BIN_VZCTL . ' start ' . $db->check($t['t_vps']), $output, $retvald);
                }
                $ret = $retvald == 0;
                break;
            case T_MIGRATE_OFFLINE:
                $params = unserialize($t['t_param']);
                exec_wrapper('vzmigrate ' . $db->check($params['target']) . ' ' . $db->check($t['t_vps']), $output, $retval);
                $ret = $retval == 0;
                break;
            case T_MIGRATE_ONLINE:
                $params = unserialize($t['t_param']);
                exec_wrapper('vzmigrate --online ' . $db->check($params['target']) . ' ' . $db->check($t['t_vps']), $output, $retval);
                // If we were not successful using online migration, fall back to offline one
                if ($retval != 0 && $params) {
                    $sql = 'UPDATE transactions SET t_type=' . T_MIGRATE_OFFLINE . ' WHERE t_id=' . $db->check($t['t_id']);
                    $db->query($sql);
                    exec_wrapper('vzmigrate ' . $db->check($params['target']) . ' ' . $db->check($t['t_vps']), $output, $retval);
                }
                $ret = $retval == 0;
                break;
            case T_SNAPSHOT:
                $params = unserialize($t['t_param']);
                exec_wrapper('vzdump --suspend ' . $db->check($t['t_vps']), $output, $retval);
                $ret = $retval == 0;
                break;
            case T_FIREWALL_RELOAD:
                $rules_to_apply = unserialize($t['t_param']);
                $fault = false;
                if ($rules_to_apply) {
                    if ($rules_to_apply['ip_v'] == 4) {
                        $firewall->commit_rule('-F OUTPUT_' . $rules_to_apply['ip_id']);
                        $firewall->commit_rule('-F INPUT_' . $rules_to_apply['ip_id']);
                    } else {
                        $firewall->commit_rule6('-F OUTPUT_' . $rules_to_apply['ip_id']);
                        $firewall->commit_rule6('-F INPUT_' . $rules_to_apply['ip_id']);
                    }
                    foreach ($rules_to_apply['rules'] as $rule) {
                        if (!$fault) {
                            if ($rules_to_apply['ip_v'] == 4) {
                                $res = $firewall->commit_rule($rule);
                            } else {
                                $res = $firewall->commit_rule6($rule);
                            }
                            $fault = !$res;
                        }
                    }
                } else {
                    $fault = true;
                }
                if ($fault) {
                    /* TODO Apocalypse scheme */
                }
                $ret = !$fault;
                break;
            case T_FIREWALL_FLUSH:
                $ip_id = unserialize($t['t_param']);
                $ip = get_ip_by_id($ip_id);
                if ($ip['ip_v'] == 4) {
                    $res1 = $firewall->commit_rule('-F OUTPUT_' . $ip['ip_id']);
                    $res2 = $firewall->commit_rule('-F INPUT_' . $ip['ip_id']);
                } else {
                    $res1 = $firewall->commit_rule6('-F OUTPUT_' . $ip['ip_id']);
                    $res2 = $firewall->commit_rule6('-F INPUT_' . $ip['ip_id']);
                }
                $ret = $res1 && $res2;
                break;
            case T_CLUSTER_TEMPLATE_COPY:
                $params = unserialize($t["t_param"]);
                $this_node = new cluster_node(SERVER_ID);
                $ret = $this_node->fetch_remote_template($params["templ_id"], $params["remote_server_id"]);
                break;
            case T_CLUSTER_TEMPLATE_DELETE:
                $params = unserialize($t["t_param"]);
                $this_node = new cluster_node(SERVER_ID);
                $ret = $this_node->delete_template($params["templ_id"]);
                break;
            case T_CLUSTER_IP_REGISTER:
                $params = unserialize($t["t_param"]);
                $ret = true;
                if ($params["ip_v"] == 6) {
                    $ret &= $firewall->commit_rule6("-N INPUT_" . $params["ip_id"]);
                    $ret &= $firewall->commit_rule6("-N OUTPUT_" . $params["ip_id"]);
                    $ret &= $firewall->commit_rule6("-A FORWARD -s {$params["ip_addr"]} -g OUTPUT_{$params["ip_id"]}");
                    $ret &= $firewall->commit_rule6("-A FORWARD -d {$params["ip_addr"]} -g INPUT_{$params["ip_id"]}");
                    $ret &= $firewall->commit_rule6("-A aztotal -s {$params["ip_addr"]}");
                    $ret &= $firewall->commit_rule6("-A aztotal -d {$params["ip_addr"]}");
                } else {
                    $ret &= $firewall->commit_rule("-N INPUT_" . $params["ip_id"]);
                    $ret &= $firewall->commit_rule("-N OUTPUT_" . $params["ip_id"]);
                    $ret &= $firewall->commit_rule("-A FORWARD -s {$params["ip_addr"]} -g OUTPUT_{$params["ip_id"]}");
                    $ret &= $firewall->commit_rule("-A FORWARD -d {$params["ip_addr"]} -g INPUT_{$params["ip_id"]}");
                    $ret &= $firewall->commit_rule("-A anix -s {$params["ip_addr"]}");
                    $ret &= $firewall->commit_rule("-A anix -d {$params["ip_addr"]}");
                    $ret &= $firewall->commit_rule("-A atranzit -s {$params["ip_addr"]}");
                    $ret &= $firewall->commit_rule("-A atranzit -d {$params["ip_addr"]}");
                    $ret &= $firewall->commit_rule("-A aztotal -s {$params["ip_addr"]}");
                    $ret &= $firewall->commit_rule("-A aztotal -d {$params["ip_addr"]}");
                }
                break;
            case T_ENABLE_DEVICES:
                $params = unserialize($t["t_param"]);
                $devices_cmd = '';
                if ($params[0]) {
                    foreach ($params as $device) {
                        $devices_cmd .= ' --devices ' . $device;
                    }
                    exec_wrapper(BIN_VZCTL . ' set ' . $db->check($t['t_vps']) . ' ' . $devices_cmd . ' --save', $output, $retval);
                }
                $ret = $retval == 0;
                break;
            case T_ENABLE_TUNTAP:
                exec_wrapper(BIN_VZCTL . ' stop ' . $db->check($t['t_vps']), $trash, $trash2);
                exec_wrapper(BIN_VZCTL . ' set ' . $db->check($t['t_vps']) . ' --capability net_admin:on --save', $output, $retval);
                exec_wrapper(BIN_VZCTL . ' start ' . $db->check($t['t_vps']), $trash, $trash2);
                if ($retval == 0) {
                    exec_wrapper(BIN_VZCTL . ' exec ' . $db->check($t['t_vps']) . ' mkdir -p /dev/net', $output, $retval);
                }
                if ($retval == 0) {
                    exec_wrapper(BIN_VZCTL . ' exec ' . $db->check($t['t_vps']) . ' mknod /dev/net/tun c 10 200', $output, $retval);
                }
                if ($retval == 0) {
                    exec_wrapper(BIN_VZCTL . ' exec ' . $db->check($t['t_vps']) . ' chmod 600 /dev/net/tun', $output, $retval);
                }
                $ret = $retval == 0;
                break;
            case T_ENABLE_FUSE:
                exec_wrapper(BIN_VZCTL . ' exec ' . $db->check($t['t_vps']) . ' mknod /dev/fuse c 10 229', $output, $retval);
                $ret = $retval == 0;
                break;
            case T_ENABLE_IPTABLES:
                exec_wrapper(BIN_VZCTL . ' stop ' . $db->check($t['t_vps']), $trash, $trash2);
                $modules = array('ip_conntrack', 'ip_conntrack_ftp', 'ip_conntrack_irc', 'ip_nat_ftp', 'ip_nat_irc', 'ip_tables', 'ipt_LOG', 'ipt_REDIRECT', 'ipt_REJECT', 'ipt_TCPMSS', 'ipt_TOS', 'ipt_conntrack', 'ipt_helper', 'ipt_length', 'ipt_limit', 'ipt_multiport', 'ipt_state', 'ipt_tcpmss', 'ipt_tos', 'ipt_ttl', 'iptable_filter', 'iptable_mangle', 'iptable_nat');
                $iptables_cmd = '';
                foreach ($modules as $module) {
                    $iptables_cmd .= ' --iptables ' . $module;
                }
                exec_wrapper(BIN_VZCTL . ' set ' . $db->check($t['t_vps']) . ' ' . $iptables_cmd . ' --save', $output, $retval);
                if ($retval == 0) {
                    exec_wrapper(BIN_VZCTL . ' set ' . $db->check($t['t_vps']) . ' --numiptent 200 --save', $output, $retval);
                }
                exec_wrapper(BIN_VZCTL . ' start ' . $db->check($t['t_vps']), $trash, $trash2);
                $ret = $retval == 0;
                break;
            case T_RESTART_NODE:
                $sql = 'UPDATE transactions SET t_done=1,
				t_success=1,
				t_output="' . serialize($ret) . '"
				WHERE t_id=' . $db->check($t['t_id']);
                $db->query($sql);
                exec_wrapper('reboot', $output, $retval);
                $ret = true;
                break;
            default:
                return false;
        }
    } else {
        $ret = false;
    }
    if (DEMO_MODE) {
        $ret = true;
    }
    // if success
    if ($ret != false) {
        $sql = 'UPDATE transactions SET t_done=1,
				t_success=1,
				t_output="' . serialize($ret) . '"
				WHERE t_id=' . $db->check($t['t_id']);
    } else {
        $sql = 'UPDATE transactions SET t_done=1, t_success=0 WHERE t_id=' . $db->check($t['t_id']);
    }
    $db->query($sql);
    return $ret;
}
Example #10
0
<?php

/*
  ./pages/page_cluster.php

  vpsAdmin
  Web-admin interface for OpenVZ (see http://openvz.org)
  Copyright (C) 2008-2011 Pavel Snajdr, snajpa@snajpa.net
*/
if ($_SESSION["is_admin"]) {
    $xtpl->title(_("Gencfg"));
    $xtpl->sbar_out(_("Gencfg"));
    if ($_REQUEST["vps"]) {
        $vps = vps_load($_REQUEST["vps"]);
        $vps_id = $vps->ve["vps_id"];
        $hostname = $vps->ve["vps_hostname"];
        $nameserver = $vps->ve["vps_nameserver"];
        while ($ip = $db->find("vps_ip", "vps_id = {$vps_id}")) {
            $ips .= "{$ip["ip_addr"]} ";
        }
        $tpl = $db->findOnce("cfg_templates", "templ_id  = {$vps->ve["vps_template"]}");
        $template = $tpl["templ_name"];
        $xtpl->table_td(nl2br(<<<CFG
NUMPROC="2046:2046"
AVNUMPROC="1023:1023"
NUMTCPSOCK="2046:2046"
NUMOTHERSOCK="2046:2046"
VMGUARPAGES="255938:9223372036854775807"

# Secondary parameters
KMEMSIZE="9223372036854775807:9223372036854775807"