diff --git a/src/api2/config/datastore.rs b/src/api2/config/datastore.rs index 7df65476..55e0775c 100644 --- a/src/api2/config/datastore.rs +++ b/src/api2/config/datastore.rs @@ -5,6 +5,7 @@ use serde_json::{json, Value}; use proxmox::api::{ApiHandler, ApiMethod, Router, RpcEnvironment}; use proxmox::api::schema::*; +use proxmox::tools::fs::CreateOptions; use crate::api2::types::*; use crate::backup::*; @@ -34,7 +35,7 @@ pub const POST: ApiMethod = ApiMethod::new( ("name", false, &DATASTORE_SCHEMA), ("path", false, &StringSchema::new("Directory path. The directory path is created if it does not already exist.").schema()), ], - ) + ) ).protected(true); fn create_datastore( @@ -54,7 +55,14 @@ fn create_datastore( } let path: PathBuf = param["path"].as_str().unwrap().into(); - let _store = ChunkStore::create(name, path)?; + let backup_user = crate::backup::backup_user()?; + let _store = ChunkStore::create( + name, + path, + CreateOptions::new() + .owner(backup_user.uid) + .group(backup_user.gid), + )?; let datastore = json!({ "path": param["path"] diff --git a/src/backup/chunk_store.rs b/src/backup/chunk_store.rs index c16d622f..f8857aca 100644 --- a/src/backup/chunk_store.rs +++ b/src/backup/chunk_store.rs @@ -85,7 +85,10 @@ impl ChunkStore { chunk_dir } - pub fn create>(name: &str, path: P) -> Result { + pub fn create

(name: &str, path: P, options: CreateOptions) -> Result + where + P: Into, + { let base: PathBuf = path.into(); @@ -95,12 +98,6 @@ impl ChunkStore { let chunk_dir = Self::chunk_dir(&base); - let backup_user = crate::backup::backup_user()?; - - let options = CreateOptions::new() - .owner(backup_user.uid) - .group(backup_user.gid); - let default_options = CreateOptions::new(); if let Err(err) = create_path(&base, Some(default_options.clone()), Some(options.clone())) { @@ -464,7 +461,7 @@ fn test_chunk_store1() { let chunk_store = ChunkStore::open("test", &path); assert!(chunk_store.is_err()); - let chunk_store = ChunkStore::create("test", &path).unwrap(); + let chunk_store = ChunkStore::create("test", &path, CreateOptions::new()).unwrap(); let (chunk, digest) = super::DataChunkBuilder::new(&[0u8, 1u8]).build().unwrap(); @@ -475,7 +472,7 @@ fn test_chunk_store1() { assert!(exists); - let chunk_store = ChunkStore::create("test", &path); + let chunk_store = ChunkStore::create("test", &path, CreateOptions::new()); assert!(chunk_store.is_err()); if let Err(_e) = std::fs::remove_dir_all(".testdir") { /* ignore */ }