mirror of
https://git.proxmox.com/git/proxmox-backup
synced 2025-08-07 11:27:52 +00:00
api: add check for nested datastores on creation
Signed-off-by: Hannes Laimer <h.laimer@proxmox.com>
This commit is contained in:
parent
91c67298f4
commit
40a2b110bf
@ -1,4 +1,4 @@
|
|||||||
use std::path::PathBuf;
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
use ::serde::{Deserialize, Serialize};
|
use ::serde::{Deserialize, Serialize};
|
||||||
use anyhow::{bail, format_err, Error};
|
use anyhow::{bail, format_err, Error};
|
||||||
@ -81,6 +81,25 @@ pub(crate) fn do_create_datastore(
|
|||||||
bail!("cannot create datastore in root path");
|
bail!("cannot create datastore in root path");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let new_store_path = Path::new(&datastore.path);
|
||||||
|
for store in config.convert_to_typed_array::<DataStoreConfig>("datastore")? {
|
||||||
|
if store.backing_device != datastore.backing_device {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Since we check for that on creation, we assume all removable datastore
|
||||||
|
// paths are relative, so don't have a leading `/`.
|
||||||
|
let store_path = Path::new(&store.path);
|
||||||
|
if store_path.starts_with(&new_store_path) || new_store_path.starts_with(&store_path) {
|
||||||
|
param_bail!(
|
||||||
|
"path",
|
||||||
|
"nested datastores not allowed: '{}' already in '{}'",
|
||||||
|
store.name,
|
||||||
|
store.path
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let need_unmount = datastore.backing_device.is_some();
|
let need_unmount = datastore.backing_device.is_some();
|
||||||
if need_unmount {
|
if need_unmount {
|
||||||
do_mount_device(datastore.clone())?;
|
do_mount_device(datastore.clone())?;
|
||||||
|
Loading…
Reference in New Issue
Block a user