From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id D222A1FF0DF for ; Thu, 05 Nov 2026 11:37:53 +0100 (CET) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id F325721621; Thu, 05 Nov 2026 11:37:43 +0100 (CET) From: Fiona Ebner To: pve-devel@lists.proxmox.com Subject: [PATCH storage v2 2/2] api: prune backups: allow Datastore.Allocate even without VM.Backup Date: Thu, 5 Nov 2026 11:35:44 +0100 Message-ID: <20261105103736.52417-3-f.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20261105103736.52417-1-f.ebner@proxmox.com> References: <20261105103736.52417-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1793875059823 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.297 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: F5YXP27754F63MLLDBSZDPOJBEF6JJHD X-Message-ID-Hash: F5YXP27754F63MLLDBSZDPOJBEF6JJHD X-MailFrom: f.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: A user with 'Datastore.Allocate' permissions for the storage can prune all backups on the storage. If the same user specifies an explicit guest ID, additionally the 'VM.Backup' permission for the VM was required. Remove this restriction, since removing a subset should not require more permissions and is also at odds with the logic in check_volume_access(). Signed-off-by: Fiona Ebner --- src/PVE/API2/Storage/PruneBackups.pm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/PVE/API2/Storage/PruneBackups.pm b/src/PVE/API2/Storage/PruneBackups.pm index 7863c36e..5f62e2b7 100644 --- a/src/PVE/API2/Storage/PruneBackups.pm +++ b/src/PVE/API2/Storage/PruneBackups.pm @@ -4,6 +4,7 @@ use strict; use warnings; use PVE::Cluster; +use PVE::Exception qw(raise_perm_exc); use PVE::JSONSchema qw(get_standard_option); use PVE::RESTHandler; use PVE::RPCEnvironment; @@ -15,11 +16,13 @@ use base qw(PVE::RESTHandler); my sub assert_prune_permission { my ($rpcenv, $authuser, $storeid, $vmid) = @_; + return if $rpcenv->check($authuser, "/storage/$storeid", ['Datastore.Allocate'], 1); + if (defined($vmid)) { $rpcenv->check($authuser, "/storage/$storeid", ['Datastore.AllocateSpace']); $rpcenv->check($authuser, "/vms/$vmid", ['VM.Backup']); } else { - $rpcenv->check($authuser, "/storage/$storeid", ['Datastore.Allocate']); + raise_perm_exc("/storage/$storeid, Datastore.Allocate"); } return; -- 2.47.3