all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pbs-devel] [PATCH proxmox-backup v2] api: enhance directory existence check
@ 2023-11-30  9:33 Markus Frank
  2023-11-30 10:26 ` Christian Ebner
  0 siblings, 1 reply; 2+ messages in thread
From: Markus Frank @ 2023-11-30  9:33 UTC (permalink / raw)
  To: pbs-devel

If a directory exists on the specified path,
it now also checks whether the directory is empty and not already mounted.

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 <m.frank@proxmox.com>
---
v2: added check if another file system is mounted on the specified path

 src/api2/node/disks/directory.rs | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/api2/node/disks/directory.rs b/src/api2/node/disks/directory.rs
index 5e1cb124..48e0bd57 100644
--- a/src/api2/node/disks/directory.rs
+++ b/src/api2/node/disks/directory.rs
@@ -1,6 +1,7 @@
 use ::serde::{Deserialize, Serialize};
 use anyhow::{bail, Error};
 use serde_json::json;
+use std::os::linux::fs::MetadataExt;
 
 use proxmox_router::{Permission, Router, RpcEnvironment, RpcEnvironmentType};
 use proxmox_schema::api;
@@ -156,12 +157,20 @@ 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
+    // and is not empty or another file system is already mounted on it
     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);
+        Ok(stat) => {
+            let basedir_dev = std::fs::metadata(BASE_MOUNT_DIR)?.st_dev();
+            if stat.st_dev() != basedir_dev {
+                bail!("path {default_path:?} already exists and is mountpoint");
+            }
+            let is_empty = default_path.read_dir()?.next().is_none();
+            if !is_empty {
+                bail!("path {default_path:?} already exists and is not empty");
+            }
         }
     }
 
-- 
2.39.2





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-11-30 10:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-30  9:33 [pbs-devel] [PATCH proxmox-backup v2] api: enhance directory existence check Markus Frank
2023-11-30 10:26 ` Christian Ebner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal