use PVE::Cluster;
use PVE::ProcFSTools;
use PVE::AccessControl;
+use Cwd 'abs_path';
use CGI;
# we use this singleton class to pass RPC related environment values
# test if we have read access to volid
my $path;
- if (my ($sid, $volname) = PVE::Storage::parse_volume_id($volid, 1)) {
+ my ($sid, $volname) = PVE::Storage::parse_volume_id($volid, 1);
+ if ($sid) {
my ($ownervm, $vtype);
($path, $ownervm, $vtype) = PVE::Storage::path($storecfg, $volid);
if ($vtype eq 'iso' || $vtype eq 'vztmpl') {
}
return 1;
} elsif ($test eq 'userid-param') {
- my ($userid, undef, $realm) = verify_username($param->{userid});
- return if !$self->check_user_exist($userid, $noerr);
+ my ($userid, undef, $realm) = PVE::AccessControl::verify_username($param->{userid});
my ($t, $subtest) = @$check;
die "missing parameters" if !$subtest;
if ($subtest eq 'self') {
- return 1 if $username eq 'userid';
+ return 0 if !$self->check_user_exist($userid, $noerr);
+ return 1 if $username eq $userid;
return 0 if $noerr;
raise_perm_exc();
} elsif ($subtest eq 'Realm.AllocateUser') {
# STDOUT,STDERR are redirected to the filename returned by upid_decode
# NOTE: we simulate running in foreground if ($self->{type} eq 'cli')
sub fork_worker {
- my ($self, $dtype, $id, $user, $function) = @_;
+ my ($self, $dtype, $id, $user, $function, $background) = @_;
$dtype = 'unknown' if !defined ($dtype);
$id = '' if !defined ($id);
$user = 'root@pve' if !defined ($user);
- my $sync = $self->{type} eq 'cli' ? 1 : 0;
+ my $sync = ($self->{type} eq 'cli' && !$background) ? 1 : 0;
local $SIG{INT} =
local $SIG{QUIT} =