-
- my $archive = '';
- my @arlist = ();
- foreach my $task (@ta) {
- if (!$task->{saved}) {
- $archive .= sprintf("$task->{upid} %08X $task->{status}\n", $task->{endtime});
- $save = 1;
- push @arlist, $task;
- $task->{saved} = 1;
- }
- }
-
- if ($archive) {
- my $size = 0;
- my $filename = "/var/log/pve/tasks/index";
- eval {
- my $fh = IO::File->new($filename, '>>', 0644) ||
- die "unable to open file '$filename' - $!\n";
- PVE::Tools::safe_print($filename, $fh, $archive);
- $size = -s $fh;
- close($fh) ||
- die "unable to close file '$filename' - $!\n";
- };
- my $err = $@;
- if ($err) {
- syslog('err', $err);
- foreach my $task (@arlist) { # mark as not saved
- $task->{saved} = 0;
+ my $path = PVE::Tools::template_replace($tmplpath, $param);
+ $path = PVE::AccessControl::normalize_path($path);
+ return $self->check_full($username, $path, $privs, $any, $noerr);
+ } elsif ($test eq 'userid-group') {
+ my $userid = $param->{userid};
+ my ($t, $privs, %options) = @$check;
+ return 0 if !$options{groups_param} && !$self->check_user_exist($userid, $noerr);
+ if (!$self->check_any($username, "/access/groups", $privs, 1)) {
+ my $groups = $self->filter_groups($username, $privs, 1);
+ if ($options{groups_param}) {
+ my @group_param = PVE::Tools::split_list($param->{groups});
+ raise_perm_exc("/access/groups, " . join("|", @$privs)) if !scalar(@group_param);
+ foreach my $pg (@group_param) {
+ raise_perm_exc("/access/groups/$pg, " . join("|", @$privs))
+ if !$groups->{$pg};
+ }
+ } else {
+ my $allowed_users = $self->group_member_join([keys %$groups]);
+ if (!$allowed_users->{$userid}) {
+ return 0 if $noerr;
+ raise_perm_exc();