normal tags require 'VM.Config.Options' on the CT, admin tags require 'Sys.Modify' on '/'
a user can set/delete/reorder tags, as long as no admin tags get added/removed Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> --- src/PVE/LXC.pm | 31 +++++++++++++++++++++++++++++++ src/PVE/LXC/Config.pm | 3 ++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm index fe63087..ce2f8ff 100644 --- a/src/PVE/LXC.pm +++ b/src/PVE/LXC.pm @@ -1333,6 +1333,37 @@ sub check_ct_modify_config_perm { } elsif ($opt eq 'hookscript') { # For now this is restricted to root@pam raise_perm_exc("changing the hookscript is only allowed for root\@pam"); + } elsif ($opt eq 'tags') { + my $old_tags = {}; + my $new_tags = {}; + my $check_admin = 0; + my $check_user = 0; + + map { $old_tags->{$_} = 1 } PVE::Tools::split_list($oldconf->{$opt}); + map { $new_tags->{$_} = 1 } PVE::Tools::split_list($newconf->{$opt}); + + my $check_tags = sub { + my ($a, $b) = @_; + foreach my $tag (keys %$a) { + next if $b->{$tag}; + if (PVE::JSONSchema::is_admin_pve_tag($tag)) { + $check_admin = 1; + } else { + $check_user = 1; + } + } + }; + + $check_tags->($old_tags, $new_tags); + $check_tags->($new_tags, $old_tags); + + if ($check_admin) { + $rpcenv->check($authuser, "/", ['Sys.Modify']); + } + + if ($check_user) { + $rpcenv->check_vm_perm($authuser, $vmid, $pool, ['VM.Config.Options']); + } } else { $rpcenv->check_vm_perm($authuser, $vmid, $pool, ['VM.Config.Options']); } diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm index b4b0261..2362d74 100644 --- a/src/PVE/LXC/Config.pm +++ b/src/PVE/LXC/Config.pm @@ -597,7 +597,8 @@ my $confdesc = { }, tags => { type => 'string', format => 'pve-tag-list', - description => 'Tags of the Container. This is only meta information.', + description => 'Tags of the Container. This is only meta information. Prefixing a tag with'. + "'+' marks it as an admin tag and can only be set with 'Sys.Modify' on '/'.", optional => 1, }, debug => { -- 2.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel