instead of it being root only Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> --- src/PVE/LXC.pm | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm index 32a2127..abe8ac3 100644 --- a/src/PVE/LXC.pm +++ b/src/PVE/LXC.pm @@ -1270,8 +1270,47 @@ sub check_ct_modify_config_perm { $opt eq 'searchdomain' || $opt eq 'hostname') { $rpcenv->check_vm_perm($authuser, $vmid, $pool, ['VM.Config.Network']); } elsif ($opt eq 'features') { - # For now this is restricted to root@pam - raise_perm_exc("changing feature flags is only allowed for root\@pam"); + raise_perm_exc("changing feature flags for privileged container is only allowed for root\@pam") + if !$unprivileged; + + my $nesting_changed = 0; + my $other_changed = 0; + if (!$delete) { + my $features = PVE::LXC::Config->parse_features($newconf->{$opt}); + if (defined($oldconf) && $oldconf->{$opt}) { + # existing container with features + my $old_features = PVE::LXC::Config->parse_features($oldconf->{$opt}); + for my $feature ((keys %$old_features, keys %$features)) { + if ($old_features->{$feature} ne $features->{$feature}) { + if ($feature eq 'nesting') { + $nesting_changed = 1; + next; + } else { + $other_changed = 1; + last; + } + } + } + } else { + # new container or no features defined + if (scalar(keys %$features) == 1 && $features->{nesting}) { + $nesting_changed = 1; + } elsif (scalar(keys %$features) > 0) { + $other_changed = 1; + } + } + } else { + my $features = PVE::LXC::Config->parse_features($oldconf->{$opt}); + if (scalar(keys %$features) == 1 && $features->{nesting}) { + $nesting_changed = 1; + } elsif (scalar(keys %$features) > 0) { + $other_changed = 1; + } + } + $rpcenv->check_vm_perm($authuser, $vmid, $pool, ['VM.Allocate']) + if $nesting_changed; + raise_perm_exc("changing feature flags (except nesting) is only allowed for root\@pam") + if $other_changed; } elsif ($opt eq 'hookscript') { # For now this is restricted to root@pam raise_perm_exc("changing the hookscript is only allowed for root\@pam"); -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel