api: datastore: cleanup store/ns handling
this should just avoid some clones, no semantic changes intended. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
ea2e91e52f
commit
974a3e521a
|
@ -187,10 +187,9 @@ pub fn list_groups(
|
||||||
) -> Result<Vec<GroupListItem>, Error> {
|
) -> Result<Vec<GroupListItem>, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
|
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store: store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let list_all = !check_ns_privs_full(
|
let list_all = !check_ns_privs_full(
|
||||||
|
@ -200,14 +199,14 @@ pub fn list_groups(
|
||||||
PRIV_DATASTORE_BACKUP,
|
PRIV_DATASTORE_BACKUP,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
|
let datastore = DataStore::lookup_datastore(&store_with_ns.store, Some(Operation::Read))?;
|
||||||
|
|
||||||
datastore
|
datastore
|
||||||
.iter_backup_groups(ns.clone())? // FIXME: Namespaces and recursion parameters!
|
.iter_backup_groups(store_with_ns.ns.clone())? // FIXME: Namespaces and recursion parameters!
|
||||||
.try_fold(Vec::new(), |mut group_info, group| {
|
.try_fold(Vec::new(), |mut group_info, group| {
|
||||||
let group = group?;
|
let group = group?;
|
||||||
|
|
||||||
let owner = match datastore.get_owner(&ns, group.as_ref()) {
|
let owner = match datastore.get_owner(&store_with_ns.ns, group.as_ref()) {
|
||||||
Ok(auth_id) => auth_id,
|
Ok(auth_id) => auth_id,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
|
@ -244,7 +243,7 @@ pub fn list_groups(
|
||||||
})
|
})
|
||||||
.to_owned();
|
.to_owned();
|
||||||
|
|
||||||
let note_path = get_group_note_path(&datastore, &ns, group.as_ref());
|
let note_path = get_group_note_path(&datastore, &store_with_ns.ns, group.as_ref());
|
||||||
let comment = file_read_firstline(¬e_path).ok();
|
let comment = file_read_firstline(¬e_path).ok();
|
||||||
|
|
||||||
group_info.push(GroupListItem {
|
group_info.push(GroupListItem {
|
||||||
|
@ -290,13 +289,13 @@ pub fn delete_group(
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Value, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
|
|
||||||
let ns = ns.unwrap_or_default();
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
|
store,
|
||||||
|
ns: ns.unwrap_or_default(),
|
||||||
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
&DatastoreWithNamespace {
|
&store_with_ns,
|
||||||
store: store.clone(),
|
|
||||||
ns: ns.clone(),
|
|
||||||
},
|
|
||||||
&auth_id,
|
&auth_id,
|
||||||
PRIV_DATASTORE_MODIFY,
|
PRIV_DATASTORE_MODIFY,
|
||||||
PRIV_DATASTORE_PRUNE,
|
PRIV_DATASTORE_PRUNE,
|
||||||
|
@ -304,7 +303,7 @@ pub fn delete_group(
|
||||||
&group,
|
&group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
if !datastore.remove_backup_group(&ns, &group)? {
|
if !datastore.remove_backup_group(&store_with_ns.ns, &group)? {
|
||||||
bail!("group only partially deleted due to protected snapshots");
|
bail!("group only partially deleted due to protected snapshots");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -342,10 +341,9 @@ pub fn list_snapshot_files(
|
||||||
) -> Result<Vec<BackupContent>, Error> {
|
) -> Result<Vec<BackupContent>, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
|
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store: store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
|
@ -357,7 +355,7 @@ pub fn list_snapshot_files(
|
||||||
&backup_dir.group,
|
&backup_dir.group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let snapshot = datastore.backup_dir(ns, backup_dir)?;
|
let snapshot = datastore.backup_dir(store_with_ns.ns, backup_dir)?;
|
||||||
|
|
||||||
let info = BackupInfo::new(snapshot)?;
|
let info = BackupInfo::new(snapshot)?;
|
||||||
|
|
||||||
|
@ -396,10 +394,9 @@ pub fn delete_snapshot(
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Value, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
|
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store: store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
|
@ -411,7 +408,7 @@ pub fn delete_snapshot(
|
||||||
&backup_dir.group,
|
&backup_dir.group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let snapshot = datastore.backup_dir(ns, backup_dir)?;
|
let snapshot = datastore.backup_dir(store_with_ns.ns, backup_dir)?;
|
||||||
|
|
||||||
snapshot.destroy(false)?;
|
snapshot.destroy(false)?;
|
||||||
|
|
||||||
|
@ -458,7 +455,7 @@ pub fn list_snapshots(
|
||||||
|
|
||||||
let ns = ns.unwrap_or_default();
|
let ns = ns.unwrap_or_default();
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -469,7 +466,7 @@ pub fn list_snapshots(
|
||||||
PRIV_DATASTORE_BACKUP,
|
PRIV_DATASTORE_BACKUP,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
|
let datastore = DataStore::lookup_datastore(&store_with_ns.store, Some(Operation::Read))?;
|
||||||
|
|
||||||
// FIXME: filter also owner before collecting, for doing that nicely the owner should move into
|
// FIXME: filter also owner before collecting, for doing that nicely the owner should move into
|
||||||
// backup group and provide an error free (Err -> None) accessor
|
// backup group and provide an error free (Err -> None) accessor
|
||||||
|
@ -749,7 +746,7 @@ pub fn verify(
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
let ns = ns.unwrap_or_default();
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -760,7 +757,7 @@ pub fn verify(
|
||||||
PRIV_DATASTORE_BACKUP,
|
PRIV_DATASTORE_BACKUP,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Read))?;
|
let datastore = DataStore::lookup_datastore(&store_with_ns.store, Some(Operation::Read))?;
|
||||||
let ignore_verified = ignore_verified.unwrap_or(true);
|
let ignore_verified = ignore_verified.unwrap_or(true);
|
||||||
|
|
||||||
let worker_id;
|
let worker_id;
|
||||||
|
@ -773,7 +770,7 @@ pub fn verify(
|
||||||
(Some(backup_type), Some(backup_id), Some(backup_time)) => {
|
(Some(backup_type), Some(backup_id), Some(backup_time)) => {
|
||||||
worker_id = format!(
|
worker_id = format!(
|
||||||
"{}:{}/{}/{}/{:08X}",
|
"{}:{}/{}/{}/{:08X}",
|
||||||
store,
|
store_with_ns.store,
|
||||||
ns.display_as_path(),
|
ns.display_as_path(),
|
||||||
backup_type,
|
backup_type,
|
||||||
backup_id,
|
backup_id,
|
||||||
|
@ -793,7 +790,7 @@ pub fn verify(
|
||||||
(Some(backup_type), Some(backup_id), None) => {
|
(Some(backup_type), Some(backup_id), None) => {
|
||||||
worker_id = format!(
|
worker_id = format!(
|
||||||
"{}:{}/{}/{}",
|
"{}:{}/{}/{}",
|
||||||
store,
|
store_with_ns.store,
|
||||||
ns.display_as_path(),
|
ns.display_as_path(),
|
||||||
backup_type,
|
backup_type,
|
||||||
backup_id
|
backup_id
|
||||||
|
@ -810,9 +807,9 @@ pub fn verify(
|
||||||
}
|
}
|
||||||
(None, None, None) => {
|
(None, None, None) => {
|
||||||
worker_id = if ns.is_root() {
|
worker_id = if ns.is_root() {
|
||||||
store.clone()
|
format!("{}", store_with_ns.store)
|
||||||
} else {
|
} else {
|
||||||
format!("{store}:{}", ns.display_as_path())
|
format!("{}:{}", store_with_ns.store, ns.display_as_path())
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
_ => bail!("parameters do not specify a backup group or snapshot"),
|
_ => bail!("parameters do not specify a backup group or snapshot"),
|
||||||
|
@ -924,10 +921,9 @@ pub fn prune(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Value, Error> {
|
) -> Result<Value, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
|
@ -939,8 +935,8 @@ pub fn prune(
|
||||||
&group,
|
&group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let worker_id = format!("{}:{}:{}", store, ns, group);
|
let worker_id = format!("{}:{}:{}", store_with_ns.store, store_with_ns.ns, group);
|
||||||
let group = datastore.backup_group(ns, group);
|
let group = datastore.backup_group(store_with_ns.ns.clone(), group);
|
||||||
|
|
||||||
let mut prune_result = Vec::new();
|
let mut prune_result = Vec::new();
|
||||||
|
|
||||||
|
@ -1571,10 +1567,9 @@ pub fn catalog(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<Vec<ArchiveEntry>, Error> {
|
) -> Result<Vec<ArchiveEntry>, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
|
@ -1586,7 +1581,7 @@ pub fn catalog(
|
||||||
&backup_dir.group,
|
&backup_dir.group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let backup_dir = datastore.backup_dir(ns, backup_dir)?;
|
let backup_dir = datastore.backup_dir(store_with_ns.ns.clone(), backup_dir)?;
|
||||||
|
|
||||||
let file_name = CATALOG_NAME;
|
let file_name = CATALOG_NAME;
|
||||||
|
|
||||||
|
@ -1864,10 +1859,9 @@ pub fn get_group_notes(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<String, Error> {
|
) -> Result<String, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
|
@ -1879,7 +1873,7 @@ pub fn get_group_notes(
|
||||||
&backup_group,
|
&backup_group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let note_path = get_group_note_path(&datastore, &ns, &backup_group);
|
let note_path = get_group_note_path(&datastore, &store_with_ns.ns, &backup_group);
|
||||||
Ok(file_read_optional_string(note_path)?.unwrap_or_else(|| "".to_owned()))
|
Ok(file_read_optional_string(note_path)?.unwrap_or_else(|| "".to_owned()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1915,10 +1909,9 @@ pub fn set_group_notes(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
&store_with_ns,
|
&store_with_ns,
|
||||||
|
@ -1929,7 +1922,7 @@ pub fn set_group_notes(
|
||||||
&backup_group,
|
&backup_group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let note_path = get_group_note_path(&datastore, &ns, &backup_group);
|
let note_path = get_group_note_path(&datastore, &store_with_ns.ns, &backup_group);
|
||||||
replace_file(note_path, notes.as_bytes(), CreateOptions::new(), false)?;
|
replace_file(note_path, notes.as_bytes(), CreateOptions::new(), false)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1963,10 +1956,9 @@ pub fn get_notes(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<String, Error> {
|
) -> Result<String, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store: store.clone(),
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
|
@ -1978,7 +1970,7 @@ pub fn get_notes(
|
||||||
&backup_dir.group,
|
&backup_dir.group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let backup_dir = datastore.backup_dir(ns, backup_dir)?;
|
let backup_dir = datastore.backup_dir(store_with_ns.ns.clone(), backup_dir)?;
|
||||||
|
|
||||||
let (manifest, _) = backup_dir.load_manifest()?;
|
let (manifest, _) = backup_dir.load_manifest()?;
|
||||||
|
|
||||||
|
@ -2019,10 +2011,9 @@ pub fn set_notes(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
|
@ -2034,7 +2025,7 @@ pub fn set_notes(
|
||||||
&backup_dir.group,
|
&backup_dir.group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let backup_dir = datastore.backup_dir(ns, backup_dir)?;
|
let backup_dir = datastore.backup_dir(store_with_ns.ns.clone(), backup_dir)?;
|
||||||
|
|
||||||
backup_dir
|
backup_dir
|
||||||
.update_manifest(|manifest| {
|
.update_manifest(|manifest| {
|
||||||
|
@ -2073,10 +2064,9 @@ pub fn get_protection(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<bool, Error> {
|
) -> Result<bool, Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
&store_with_ns,
|
&store_with_ns,
|
||||||
|
@ -2087,7 +2077,7 @@ pub fn get_protection(
|
||||||
&backup_dir.group,
|
&backup_dir.group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let backup_dir = datastore.backup_dir(ns, backup_dir)?;
|
let backup_dir = datastore.backup_dir(store_with_ns.ns.clone(), backup_dir)?;
|
||||||
|
|
||||||
Ok(backup_dir.is_protected())
|
Ok(backup_dir.is_protected())
|
||||||
}
|
}
|
||||||
|
@ -2124,10 +2114,9 @@ pub fn set_protection(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
let datastore = check_privs_and_load_store(
|
let datastore = check_privs_and_load_store(
|
||||||
&store_with_ns,
|
&store_with_ns,
|
||||||
|
@ -2138,7 +2127,7 @@ pub fn set_protection(
|
||||||
&backup_dir.group,
|
&backup_dir.group,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let backup_dir = datastore.backup_dir(ns, backup_dir)?;
|
let backup_dir = datastore.backup_dir(store_with_ns.ns.clone(), backup_dir)?;
|
||||||
|
|
||||||
datastore.update_protection(&backup_dir, protected)
|
datastore.update_protection(&backup_dir, protected)
|
||||||
}
|
}
|
||||||
|
@ -2175,10 +2164,9 @@ pub fn set_backup_owner(
|
||||||
rpcenv: &mut dyn RpcEnvironment,
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
) -> Result<(), Error> {
|
) -> Result<(), Error> {
|
||||||
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
let auth_id: Authid = rpcenv.get_auth_id().unwrap().parse()?;
|
||||||
let ns = ns.unwrap_or_default();
|
|
||||||
let store_with_ns = DatastoreWithNamespace {
|
let store_with_ns = DatastoreWithNamespace {
|
||||||
store: store.clone(),
|
store,
|
||||||
ns: ns.clone(),
|
ns: ns.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
let owner_check_required = check_ns_privs_full(
|
let owner_check_required = check_ns_privs_full(
|
||||||
&store_with_ns,
|
&store_with_ns,
|
||||||
|
@ -2187,9 +2175,9 @@ pub fn set_backup_owner(
|
||||||
PRIV_DATASTORE_BACKUP,
|
PRIV_DATASTORE_BACKUP,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let datastore = DataStore::lookup_datastore(&store, Some(Operation::Write))?;
|
let datastore = DataStore::lookup_datastore(&store_with_ns.store, Some(Operation::Write))?;
|
||||||
|
|
||||||
let backup_group = datastore.backup_group(ns, backup_group);
|
let backup_group = datastore.backup_group(store_with_ns.ns, backup_group);
|
||||||
|
|
||||||
if owner_check_required {
|
if owner_check_required {
|
||||||
let owner = backup_group.get_owner()?;
|
let owner = backup_group.get_owner()?;
|
||||||
|
|
Loading…
Reference in New Issue