return ruid in reauth_user_for_user_modification, add param name

since the upcoming use case in change_password uses the returned $ruid
and the parameter is called 'confirmation-password' there

also generalize the error so it does not mention TFA

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
Wolfgang Bumiller 2024-03-15 13:44:27 +01:00
parent 060941d467
commit 90faf488db
2 changed files with 11 additions and 8 deletions

View File

@ -351,7 +351,7 @@ __PACKAGE__->register_method ({
my $rpcenv = PVE::RPCEnvironment::get(); my $rpcenv = PVE::RPCEnvironment::get();
my $authuser = $rpcenv->get_user(); my $authuser = $rpcenv->get_user();
my ($userid, $realm) = $rpcenv->reauth_user_for_user_modification( my ($userid, undef, $realm) = $rpcenv->reauth_user_for_user_modification(
$authuser, $authuser,
$param->{userid}, $param->{userid},
$param->{password}, $param->{password},

View File

@ -637,21 +637,24 @@ sub is_worker {
return PVE::RESTEnvironment->is_worker(); return PVE::RESTEnvironment->is_worker();
} }
# Permission helper for TFA and password API endpoints modifying users.
# Only root may modify root, regular users need to specify their password. # Only root may modify root, regular users need to specify their password.
# #
# Returns the userid returned from `verify_username`. # Returns the same as `verify_username` in list context (userid, ruid, realm),
# Or ($userid, $realm) in list context. # or just the userid in scalar context.
sub reauth_user_for_user_modification : prototype($$$$) { sub reauth_user_for_user_modification : prototype($$$$;$) {
my ($rpcenv, $authuser, $userid, $password) = @_; my ($rpcenv, $authuser, $userid, $password, $param_name) = @_;
($userid, undef, my $realm) = PVE::AccessControl::verify_username($userid); $param_name //= 'password';
($userid, my $ruid, my $realm) = PVE::AccessControl::verify_username($userid);
$rpcenv->check_user_exist($userid); $rpcenv->check_user_exist($userid);
raise_perm_exc() if $userid eq 'root@pam' && $authuser ne 'root@pam'; raise_perm_exc() if $userid eq 'root@pam' && $authuser ne 'root@pam';
# Regular users need to confirm their password to change TFA settings. # Regular users need to confirm their password to change TFA settings.
if ($authuser ne 'root@pam') { if ($authuser ne 'root@pam') {
raise_param_exc({ 'password' => 'password is required to modify TFA data' }) raise_param_exc({ $param_name => 'password is required to modify user' })
if !defined($password); if !defined($password);
($authuser, my $auth_username, my $auth_realm) = ($authuser, my $auth_username, my $auth_realm) =
@ -664,7 +667,7 @@ sub reauth_user_for_user_modification : prototype($$$$) {
$plugin->authenticate_user($cfg, $auth_realm, $auth_username, $password); $plugin->authenticate_user($cfg, $auth_realm, $auth_username, $password);
} }
return wantarray ? ($userid, $realm) : $userid; return wantarray ? ($userid, $ruid, $realm) : $userid;
} }
1; 1;