From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id C7F77B3CB7 for ; Wed, 29 Nov 2023 15:08:50 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id ACCC087EA for ; Wed, 29 Nov 2023 15:08:50 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Wed, 29 Nov 2023 15:08:50 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id BCEFC40C59 for ; Wed, 29 Nov 2023 15:08:49 +0100 (CET) From: Markus Frank To: pbs-devel@lists.proxmox.com Date: Wed, 29 Nov 2023 15:08:38 +0100 Message-Id: <20231129140838.133066-1-m.frank@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.034 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pbs-devel] [PATCH proxmox-backup] api: enhance directory existence check X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Nov 2023 14:08:50 -0000 Instead of just checking the existence of the path, the code now also checks whether the directory is empty, continues if it is, and aborts if it is not. Previously, if a directory were deleted and a directory with the same name would be created, the old check prevented the creation even though the directory could be used as a mount point. Signed-off-by: Markus Frank --- src/api2/node/disks/directory.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/api2/node/disks/directory.rs b/src/api2/node/disks/directory.rs index 5e1cb124..cd7b44a3 100644 --- a/src/api2/node/disks/directory.rs +++ b/src/api2/node/disks/directory.rs @@ -155,13 +155,17 @@ pub fn create_datastore_disk( let mount_point = format!("{}{}", BASE_MOUNT_DIR, &name); - // check if the default path does exist already and bail if it does + // check if the default path does exist already + // and bail if it does and is not empty let default_path = std::path::PathBuf::from(&mount_point); match std::fs::metadata(&default_path) { Err(_) => {} // path does not exist Ok(_) => { - bail!("path {:?} already exists", default_path); + let is_empty = default_path.read_dir()?.next().is_none(); + if !is_empty { + bail!("path {:?} already exists and is not empty", default_path); + } } } -- 2.39.2