From 5ba83ed09901b5b5954647c2a26aad7afe31c218 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Tue, 8 Dec 2020 11:24:38 +0100 Subject: [PATCH] tape: check digest on config update --- src/api2/config/changer.rs | 15 +++++++++++++-- src/api2/config/drive.rs | 17 ++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/api2/config/changer.rs b/src/api2/config/changer.rs index 71631ac9..c6b0efcd 100644 --- a/src/api2/config/changer.rs +++ b/src/api2/config/changer.rs @@ -6,6 +6,7 @@ use proxmox::api::{api, Router, RpcEnvironment}; use crate::{ config, api2::types::{ + PROXMOX_CONFIG_DIGEST_SCHEMA, CHANGER_ID_SCHEMA, LINUX_DRIVE_PATH_SCHEMA, DriveListEntry, @@ -148,19 +149,29 @@ pub fn list_changers( schema: LINUX_DRIVE_PATH_SCHEMA, optional: true, }, - }, + digest: { + schema: PROXMOX_CONFIG_DIGEST_SCHEMA, + optional: true, + }, + }, }, )] /// Update a tape changer configuration pub fn update_changer( name: String, path: Option, + digest: Option, _param: Value, ) -> Result<(), Error> { let _lock = config::drive::lock()?; - let (mut config, _digest) = config::drive::config()?; + let (mut config, expected_digest) = config::drive::config()?; + + if let Some(ref digest) = digest { + let digest = proxmox::tools::hex_to_digest(digest)?; + crate::tools::detect_modified_configuration_file(&digest, &expected_digest)?; + } let mut data: ScsiTapeChanger = config.lookup("changer", &name)?; diff --git a/src/api2/config/drive.rs b/src/api2/config/drive.rs index 1702e476..1ab51e01 100644 --- a/src/api2/config/drive.rs +++ b/src/api2/config/drive.rs @@ -6,6 +6,7 @@ use proxmox::api::{api, Router, RpcEnvironment}; use crate::{ config, api2::types::{ + PROXMOX_CONFIG_DIGEST_SCHEMA, DRIVE_ID_SCHEMA, CHANGER_ID_SCHEMA, LINUX_DRIVE_PATH_SCHEMA, @@ -147,7 +148,11 @@ pub fn list_drives( schema: CHANGER_ID_SCHEMA, optional: true, }, - }, + digest: { + schema: PROXMOX_CONFIG_DIGEST_SCHEMA, + optional: true, + }, + }, }, )] /// Update a drive configuration @@ -155,12 +160,18 @@ pub fn update_drive( name: String, path: Option, changer: Option, - _param: Value, + digest: Option, + _param: Value, ) -> Result<(), Error> { let _lock = config::drive::lock()?; - let (mut config, _digest) = config::drive::config()?; + let (mut config, expected_digest) = config::drive::config()?; + + if let Some(ref digest) = digest { + let digest = proxmox::tools::hex_to_digest(digest)?; + crate::tools::detect_modified_configuration_file(&digest, &expected_digest)?; + } let mut data: LinuxTapeDrive = config.lookup("linux", &name)?;