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(); }
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); }