2011-09-21 21:26:00 +00:00
|
|
|
#!/usr/bin/env php
|
|
|
|
|
|
|
|
<?php
|
|
|
|
// This file is part of BOINC.
|
|
|
|
// http://boinc.berkeley.edu
|
|
|
|
// Copyright (C) 2011 University of California
|
|
|
|
//
|
|
|
|
// BOINC is free software; you can redistribute it and/or modify it
|
|
|
|
// under the terms of the GNU Lesser General Public License
|
|
|
|
// as published by the Free Software Foundation,
|
|
|
|
// either version 3 of the License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// BOINC is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
// See the GNU Lesser General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
|
|
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
// script for controlling "manage" privileges.
|
|
|
|
// See http://boinc.berkeley.edu/trac/wiki/MultiUser
|
|
|
|
// Run this from the project directory.
|
|
|
|
|
|
|
|
// usage:
|
|
|
|
//
|
|
|
|
// manage_privileges grant userid {appname|all}
|
|
|
|
// manage_privileges revoke userid {appname|all}
|
|
|
|
// manage_privileges list
|
|
|
|
//
|
2016-12-16 20:11:20 +00:00
|
|
|
// grant/revoke the "manage" privileges for the given app (or all apps),
|
|
|
|
// or list all privileges
|
2011-09-21 21:26:00 +00:00
|
|
|
|
|
|
|
error_reporting(E_ALL);
|
|
|
|
ini_set('display_errors', true);
|
|
|
|
ini_set('display_startup_errors', true);
|
|
|
|
|
|
|
|
function usage() {
|
|
|
|
die("usage:
|
|
|
|
manage_privileges grant userid {appname|all}
|
|
|
|
manage_privileges revoke userid {appname|all}
|
|
|
|
manage_privileges list
|
|
|
|
");
|
|
|
|
}
|
|
|
|
|
|
|
|
function show_user($user) {
|
|
|
|
echo "$user->name (ID $user->id)\n";
|
|
|
|
}
|
|
|
|
|
|
|
|
function show_managers() {
|
|
|
|
echo "Users with global manager privileges: \n";
|
|
|
|
$buss = BoincUserSubmit::enum("manage_all<>0");
|
|
|
|
if (!count($buss)) {
|
|
|
|
echo "none\n";
|
|
|
|
} else {
|
|
|
|
foreach ($buss as $bus) {
|
|
|
|
$user = BoincUser::lookup_id($bus->user_id);
|
|
|
|
show_user($user);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$apps = BoincApp::enum(null);
|
|
|
|
foreach ($apps as $app) {
|
|
|
|
echo "\nUsers with manager privileges for $app->name:\n";
|
|
|
|
$busas = BoincUserSubmitApp::enum("app_id=$app->id and manage<>0");
|
|
|
|
if (!count($busas)) {
|
|
|
|
echo "none\n";
|
|
|
|
} else {
|
|
|
|
foreach ($busas as $busa) {
|
|
|
|
$user = BoincUser::lookup_id($busa->user_id);
|
|
|
|
show_user($user);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!file_exists("config.xml")) {
|
|
|
|
die("run this script from the project directory\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
chdir("html/inc");
|
|
|
|
|
|
|
|
require_once("boinc_db.inc");
|
|
|
|
require_once("submit_db.inc");
|
|
|
|
|
|
|
|
if ($argc < 2) usage();
|
|
|
|
|
|
|
|
if ($argv[1] == "list") {
|
|
|
|
show_managers();
|
|
|
|
exit;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($argc < 4) usage();
|
|
|
|
|
|
|
|
$user = BoincUser::lookup_id($argv[2]);
|
|
|
|
if (!$user) {
|
|
|
|
die("no such user: ".$argv[1]."\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($argv[1] === "grant") {
|
|
|
|
$grant = true;
|
|
|
|
} else if ($argv[1] === "revoke") {
|
|
|
|
$grant = false;
|
|
|
|
} else {
|
|
|
|
usage();
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($argv[3] === "all") {
|
|
|
|
$bus = BoincUserSubmit::lookup_userid($user->id);
|
|
|
|
if ($bus) {
|
|
|
|
if ($grant) {
|
|
|
|
if ($bus->manage_all) {
|
|
|
|
die("User $user->id already has global manage access\n");
|
|
|
|
} else {
|
|
|
|
$bus->update("manage_all=1");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ($bus->manage_all) {
|
|
|
|
$bus->update("manage_all=0");
|
|
|
|
} else {
|
|
|
|
die("User $user->id does not have global manage access\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ($grant) {
|
2020-10-01 22:08:10 +00:00
|
|
|
BoincUserSubmit::insert("set user_id=$user->id, quota=0, logical_start_time=0, submit_all=0, manage_all=1, max_jobs_in_progress=0");
|
2011-09-21 21:26:00 +00:00
|
|
|
} else {
|
|
|
|
die("User $user->id does not have global manage access\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
2011-12-10 22:03:43 +00:00
|
|
|
$app = BoincApp::lookup("name='".$argv[3]."'");
|
2012-11-11 08:02:35 +00:00
|
|
|
if (!$app) die("no such app: ".$argv[3]."\n");
|
2011-09-21 21:26:00 +00:00
|
|
|
$busa = BoincUserSubmitApp::lookup("user_id=$user->id and app_id=$app->id");
|
|
|
|
if ($busa) {
|
|
|
|
if ($grant) {
|
|
|
|
if ($busa->manage) {
|
|
|
|
die("User $user->id already has manage access for $app->name\n");
|
|
|
|
} else {
|
|
|
|
$busa->update("manage=1");
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ($busa->manage) {
|
|
|
|
$busa->update("manage=0");
|
|
|
|
} else {
|
|
|
|
die("User $user->id does not have manage access for $app->name\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ($grant) {
|
2011-09-23 17:04:22 +00:00
|
|
|
$bus = BoincUserSubmit::lookup_userid($user->id);
|
2011-09-21 21:26:00 +00:00
|
|
|
if (!$bus) {
|
2020-10-01 22:08:10 +00:00
|
|
|
BoincUserSubmit::insert("set user_id=$user->id, quota=0, logical_start_time=0, submit_all=0, manage_all=0, max_jobs_in_progress=0");
|
2011-09-21 21:26:00 +00:00
|
|
|
}
|
2011-12-10 22:03:43 +00:00
|
|
|
BoincUserSubmitApp::insert("set user_id=$user->id, app_id=$app->id, manage=1");
|
2011-09-21 21:26:00 +00:00
|
|
|
} else {
|
|
|
|
die("User $user->id does not have manage access for $app->name\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
echo "Done.\n";
|
|
|
|
|
|
|
|
?>
|