On June 16, 2021 2:16 pm, Lorenz Stechauner wrote: > the two checks make sure that: > * no user defined role 'PVEPoolUser' exists > * the user gets a hint for roles only containing Pool.Allocate and > not Pool.Audit > > Signed-off-by: Lorenz Stechauner <l.stechau...@proxmox.com> > --- > changes to v1: > * rebased on master > > PVE/CLI/pve6to7.pm | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/PVE/CLI/pve6to7.pm b/PVE/CLI/pve6to7.pm > index 90f92a55..b391d006 100644 > --- a/PVE/CLI/pve6to7.pm > +++ b/PVE/CLI/pve6to7.pm > @@ -9,6 +9,7 @@ use PVE::API2::LXC; > use PVE::API2::Qemu; > use PVE::API2::Certificates; > > +use PVE::AccessControl; > use PVE::Ceph::Tools; > use PVE::Cluster; > use PVE::Corosync; > @@ -693,6 +694,30 @@ sub check_misc { > > check_backup_retention_settings(); > check_cifs_credential_location(); > + > + log_info("Check custom roles"); > + my $usercfg = PVE::Cluster::cfs_read_file("user.cfg"); > + foreach my $role (sort keys %{$usercfg->{roles}}) { > + if (PVE::AccessControl::role_is_special($role)) { > + next; > + } > + > + if ($role eq "PVEPoolUser") { > + # the user created a custom role named PVEPoolUser > + log_fail("Custom role '$role' has a restricted name - a built-in > role 'PVEPoolUser' will be available with the upgrade"); > + } else { > + log_pass("Custom role '$role' has no restricted name"); > + } > + > + my $perms = $usercfg->{roles}->{$role}; > + if ($perms->{'Pool.Allocate'} && $perms->{'Pool.Audit'}) { > + log_pass("Custom role '$role' contains updated pool permissions");
that does not work for PVE 6.x, where Pool.Audit is not yet a valid privilege, so gets dropped on parsing user.cfg ;) so either we add it as valid privilege (without using it for anything) in a new stable-6 branch, or we switch to lower-level parsing/checks here.. the file format is pretty simple, so the following should probably work for the purposes of the check: read raw file look for lines starting with 'role:' split line on ':' split_list third field do checks like in this patch (split third field is privilege list, second field is role name) obviously, this might warn about some roles that otherwise fail parsing with the real parser (e.g., invalid name), but that isn't really a problem for the purpose that pve6to7 has ;) > + } elsif ($perms->{'Pool.Allocate'}) { > + log_warn("Custom role '$role' contains permission 'Pool.Allocate' - > to ensure same behavior add 'Pool.Audit' to this role after the upgrade"); > + } else { > + log_pass("Custom role '$role' contains no permissions that need to > be updated"); > + } > + } > } > > __PACKAGE__->register_method ({ > -- > 2.20.1 > > > > _______________________________________________ > pve-devel mailing list > pve-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel > > > _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel