From 325b32cc401e3c4185d926b8827e17e9feb3c16e Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Tue, 26 Apr 2022 14:30:50 +0200 Subject: [PATCH] api: create: refactor parameter check logic In preparation to allow passing along certain parameters together with 'archive'. Moving the parameter checks to after the conflicts-with-'archive' to ensure that the more telling error will trigger first. All check helpers should handle empty params fine, but check first just to make sure and to avoid all the superfluous function calls. Signed-off-by: Fabian Ebner --- PVE/API2/Qemu.pm | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 1f5bc630..c36a84ee 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -818,22 +818,7 @@ __PACKAGE__->register_method({ raise_perm_exc(); } - if (!$archive) { - &$resolve_cdrom_alias($param); - - &$check_storage_access($rpcenv, $authuser, $storecfg, $vmid, $param, $storage); - - &$check_vm_modify_config_perm($rpcenv, $authuser, $vmid, $pool, [ keys %$param]); - - &$check_vm_create_serial_perm($rpcenv, $authuser, $vmid, $pool, $param); - &$check_vm_create_usb_perm($rpcenv, $authuser, $vmid, $pool, $param); - - &$check_cpu_model_access($rpcenv, $authuser, $param); - - $check_drive_param->($param, $storecfg); - - PVE::QemuServer::add_random_macs($param); - } else { + if ($archive) { my $keystr = join(' ', keys %$param); raise_param_exc({ archive => "option conflicts with other options ($keystr)"}) if $keystr; @@ -854,6 +839,23 @@ __PACKAGE__->register_method({ } } + if (scalar(keys $param->%*) > 0) { + &$resolve_cdrom_alias($param); + + &$check_storage_access($rpcenv, $authuser, $storecfg, $vmid, $param, $storage); + + &$check_vm_modify_config_perm($rpcenv, $authuser, $vmid, $pool, [ keys %$param]); + + &$check_vm_create_serial_perm($rpcenv, $authuser, $vmid, $pool, $param); + &$check_vm_create_usb_perm($rpcenv, $authuser, $vmid, $pool, $param); + + &$check_cpu_model_access($rpcenv, $authuser, $param); + + $check_drive_param->($param, $storecfg); + + PVE::QemuServer::add_random_macs($param); + } + my $emsg = $is_restore ? "unable to restore VM $vmid -" : "unable to create VM $vmid -"; eval { PVE::QemuConfig->create_and_lock_config($vmid, $force) };