backup/datastore: refactor check_backup_owner there
and add a 'owns_backup' convenience function Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
0a240aaa9a
commit
9751ef4b36
@ -74,18 +74,6 @@ fn check_priv_or_backup_owner(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn check_backup_owner(
|
||||
owner: &Authid,
|
||||
auth_id: &Authid,
|
||||
) -> Result<(), Error> {
|
||||
let correct_owner = owner == auth_id
|
||||
|| (owner.is_token() && &Authid::from(owner.user().clone()) == auth_id);
|
||||
if !correct_owner {
|
||||
bail!("backup owner check failed ({} != {})", auth_id, owner);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn read_backup_index(
|
||||
store: &DataStore,
|
||||
backup_dir: &BackupDir,
|
||||
|
@ -37,6 +37,20 @@ lazy_static! {
|
||||
static ref DATASTORE_MAP: Mutex<HashMap<String, Arc<DataStore>>> = Mutex::new(HashMap::new());
|
||||
}
|
||||
|
||||
/// checks if auth_id is owner, or, if owner is a token, if
|
||||
/// auth_id is the user of the token
|
||||
pub fn check_backup_owner(
|
||||
owner: &Authid,
|
||||
auth_id: &Authid,
|
||||
) -> Result<(), Error> {
|
||||
let correct_owner = owner == auth_id
|
||||
|| (owner.is_token() && &Authid::from(owner.user().clone()) == auth_id);
|
||||
if !correct_owner {
|
||||
bail!("backup owner check failed ({} != {})", auth_id, owner);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Datastore Management
|
||||
///
|
||||
/// A Datastore can store severals backups, and provides the
|
||||
@ -338,6 +352,12 @@ impl DataStore {
|
||||
Ok(owner.trim_end().parse()?) // remove trailing newline
|
||||
}
|
||||
|
||||
pub fn owns_backup(&self, backup_group: &BackupGroup, auth_id: &Authid) -> Result<bool, Error> {
|
||||
let owner = self.get_owner(backup_group)?;
|
||||
|
||||
Ok(check_backup_owner(owner, auth_id).is_ok())
|
||||
}
|
||||
|
||||
/// Set the backup owner.
|
||||
pub fn set_owner(
|
||||
&self,
|
||||
|
Loading…
Reference in New Issue
Block a user