Esempio n. 1
0
function create_user($username, $password)
{
    global $conf_base_path, $conf_nodes, $conf_c9_group, $conf_defaults_path, $users;
    global $is_storage_node, $is_control_node, $is_svn_node, $storage_node_addr;
    $forbidden_usernames = array('root', 'daemon', 'bin', 'sys', 'sync', 'games', 'man', 'lp', 'mail', 'news', 'uucp', 'proxy', 'www-data', 'backup', 'list', 'irc', 'gnats', 'nobody', 'libuuid', 'syslog', 'messagebus', 'landscape', 'sshd', 'c9test', 'c9');
    if (in_array($username, $forbidden_usernames)) {
        debug_log("forbidden username {$username}");
        print "ERROR: username {$username} not allowed\n";
        return;
    }
    $userdata = setup_paths($username);
    if ($is_control_node) {
        debug_log("create_user {$username}");
    }
    // Create user on storage node
    if ($is_storage_node) {
        exec("useradd -d " . $userdata['home'] . " -g {$conf_c9_group} -k {$conf_defaults_path}/home -m " . $userdata['esa']);
        // For some reason files copied from default home aren't owned by user :(
        exec("chown -R " . $userdata['esa'] . ":{$conf_c9_group} " . $userdata['home']);
    } else {
        if ($is_control_node) {
            run_on($storage_node_addr, "{$conf_base_path}/bin/webidectl add-user " . $userdata['esa'] . " " . escapeshellarg($password));
        }
        exec("useradd -d " . $userdata['home'] . " -g {$conf_c9_group} " . $userdata['esa']);
    }
    // If this is control node, create user on other nodes
    if ($is_control_node) {
        foreach ($conf_nodes as $node) {
            if (!in_array("control", $node['type']) && !in_array("compute", $node['type']) && !in_array("svn", $node['type'])) {
                continue;
            }
            if (!is_local($node['address']) && !in_array("control", $node['type'])) {
                run_on($node['address'], "{$conf_base_path}/bin/webidectl add-user " . $userdata['esa'] . " " . escapeshellarg($password));
            }
        }
    }
    // If this is svn node, create repo
    if ($is_svn_node) {
        user_create_svn_workspace($username);
    }
    // Copy defaults
    if ($is_storage_node && $is_control_node) {
        reset_config($username);
    } else {
        if ($is_control_node) {
            run_on($storage_node_addr, "{$conf_base_path}/bin/webidectl reset-config " . $userdata['esa']);
        }
    }
    // Add default files to SVN
    if ($is_svn_node) {
        run_as($username, "cd " . $userdata['workspace'] . "; svn add *; svn ci -m import .");
    }
    // Init git on storage node and fix
    if ($is_storage_node && $is_control_node) {
        git_init($username);
    } else {
        if ($is_control_node) {
            run_on($storage_node_addr, "{$conf_base_path}/bin/webidectl git-init " . $userdata['esa']);
        }
    }
    // Fix c9 link
    if ($is_control_node) {
        run_as($username, "cd " . $userdata['home'] . "; ln -s {$conf_base_path}/c9fork fork");
    }
    $users[$username] = array();
    $users[$username]['status'] = "inactive";
    write_files();
}
Esempio n. 2
0
function ajax_save_remove_feature($param, $postdata)
{
    global $data_path;
    if (!check_param($param)) {
        return array('saved' => false, 'error' => 'Invalid ID');
    }
    git_init();
    if (array_key_exists('rev', $param)) {
        git_checkout($param['rev']);
    }
    // create directory for map data
    $path = "{$data_path}/{$param['id']}";
    if (!is_dir($path)) {
        mkdir($path);
    }
    $feature_id = $postdata;
    git_exec("rm " . shell_escape("{$param['id']}/_" . $feature_id . '.json'));
    git_commit("remove feature");
    $rev = git_rev();
    if (!git_merge()) {
        return array('saved' => false, 'rev' => $rev, 'error' => "Conflict when merging changes. Please reload and re-do changes.");
    }
    return array('saved' => true, 'rev' => $rev);
}