mirror of
git://git.proxmox.com/git/proxmox-backup.git
synced 2025-03-11 16:58:32 +03:00
move pbs_config::key_config to pbs-key-config
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
28917c7127
commit
1104d2a268
@ -34,6 +34,7 @@ members = [
|
|||||||
"pbs-config",
|
"pbs-config",
|
||||||
"pbs-datastore",
|
"pbs-datastore",
|
||||||
"pbs-fuse-loop",
|
"pbs-fuse-loop",
|
||||||
|
"pbs-key-config",
|
||||||
"pbs-pxar-fuse",
|
"pbs-pxar-fuse",
|
||||||
"pbs-tape",
|
"pbs-tape",
|
||||||
"pbs-tools",
|
"pbs-tools",
|
||||||
@ -89,6 +90,7 @@ pbs-client = { path = "pbs-client" }
|
|||||||
pbs-config = { path = "pbs-config" }
|
pbs-config = { path = "pbs-config" }
|
||||||
pbs-datastore = { path = "pbs-datastore" }
|
pbs-datastore = { path = "pbs-datastore" }
|
||||||
pbs-fuse-loop = { path = "pbs-fuse-loop" }
|
pbs-fuse-loop = { path = "pbs-fuse-loop" }
|
||||||
|
pbs-key-config = { path = "pbs-key-config" }
|
||||||
pbs-pxar-fuse = { path = "pbs-pxar-fuse" }
|
pbs-pxar-fuse = { path = "pbs-pxar-fuse" }
|
||||||
pbs-tape = { path = "pbs-tape" }
|
pbs-tape = { path = "pbs-tape" }
|
||||||
pbs-tools = { path = "pbs-tools" }
|
pbs-tools = { path = "pbs-tools" }
|
||||||
@ -225,6 +227,7 @@ pbs-buildcfg.workspace = true
|
|||||||
pbs-client.workspace = true
|
pbs-client.workspace = true
|
||||||
pbs-config.workspace = true
|
pbs-config.workspace = true
|
||||||
pbs-datastore.workspace = true
|
pbs-datastore.workspace = true
|
||||||
|
pbs-key-config.workspace = true
|
||||||
pbs-tape.workspace = true
|
pbs-tape.workspace = true
|
||||||
pbs-tools.workspace = true
|
pbs-tools.workspace = true
|
||||||
proxmox-rrd.workspace = true
|
proxmox-rrd.workspace = true
|
||||||
|
@ -17,16 +17,15 @@ regex.workspace = true
|
|||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
serde_json.workspace = true
|
serde_json.workspace = true
|
||||||
|
|
||||||
proxmox-lang.workspace=true
|
|
||||||
proxmox-metrics.workspace = true
|
proxmox-metrics.workspace = true
|
||||||
proxmox-router = { workspace = true, default-features = false }
|
proxmox-router = { workspace = true, default-features = false }
|
||||||
proxmox-schema.workspace = true
|
proxmox-schema.workspace = true
|
||||||
proxmox-section-config.workspace = true
|
proxmox-section-config.workspace = true
|
||||||
proxmox-serde.workspace = true
|
|
||||||
proxmox-shared-memory.workspace = true
|
proxmox-shared-memory.workspace = true
|
||||||
proxmox-sys = { workspace = true, features = [ "acl", "crypt", "timer" ] }
|
proxmox-sys = { workspace = true, features = [ "acl", "crypt", "timer" ] }
|
||||||
proxmox-time.workspace = true
|
proxmox-time.workspace = true
|
||||||
|
|
||||||
pbs-api-types.workspace = true
|
pbs-api-types.workspace = true
|
||||||
pbs-buildcfg.workspace = true
|
pbs-buildcfg.workspace = true
|
||||||
|
pbs-key-config.workspace = true
|
||||||
pbs-tools.workspace = true
|
pbs-tools.workspace = true
|
||||||
|
@ -4,7 +4,6 @@ pub use cached_user_info::CachedUserInfo;
|
|||||||
pub mod datastore;
|
pub mod datastore;
|
||||||
pub mod domains;
|
pub mod domains;
|
||||||
pub mod drive;
|
pub mod drive;
|
||||||
pub mod key_config;
|
|
||||||
pub mod media_pool;
|
pub mod media_pool;
|
||||||
pub mod metrics;
|
pub mod metrics;
|
||||||
pub mod network;
|
pub mod network;
|
||||||
|
@ -16,9 +16,9 @@ use anyhow::{bail, Error};
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use pbs_api_types::Fingerprint;
|
use pbs_api_types::Fingerprint;
|
||||||
|
use pbs_key_config::KeyConfig;
|
||||||
use proxmox_sys::fs::file_read_optional_string;
|
use proxmox_sys::fs::file_read_optional_string;
|
||||||
|
|
||||||
use crate::key_config::KeyConfig;
|
|
||||||
use crate::{open_backup_lockfile, replace_backup_config, replace_secret_config};
|
use crate::{open_backup_lockfile, replace_backup_config, replace_secret_config};
|
||||||
|
|
||||||
mod hex_key {
|
mod hex_key {
|
||||||
|
@ -38,4 +38,5 @@ proxmox-sys.workspace = true
|
|||||||
pbs-api-types.workspace = true
|
pbs-api-types.workspace = true
|
||||||
pbs-buildcfg.workspace = true
|
pbs-buildcfg.workspace = true
|
||||||
pbs-config.workspace = true
|
pbs-config.workspace = true
|
||||||
|
pbs-key-config.workspace = true
|
||||||
pbs-tools.workspace = true
|
pbs-tools.workspace = true
|
||||||
|
@ -266,7 +266,7 @@ impl TryFrom<super::DataBlob> for BackupManifest {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_manifest_signature() -> Result<(), Error> {
|
fn test_manifest_signature() -> Result<(), Error> {
|
||||||
use pbs_config::key_config::KeyDerivationConfig;
|
use pbs_key_config::KeyDerivationConfig;
|
||||||
|
|
||||||
let pw = b"test";
|
let pw = b"test";
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use proxmox_schema::api;
|
use proxmox_schema::api;
|
||||||
|
|
||||||
use pbs_config::key_config::KeyConfig;
|
use pbs_key_config::KeyConfig;
|
||||||
|
|
||||||
#[api()]
|
#[api()]
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
21
pbs-key-config/Cargo.toml
Normal file
21
pbs-key-config/Cargo.toml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
[package]
|
||||||
|
name = "pbs-key-config"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors.workspace = true
|
||||||
|
edition.workspace = true
|
||||||
|
description = "Encryption key configuration and usage for PBS clients"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow.workspace = true
|
||||||
|
nix.workspace = true
|
||||||
|
openssl.workspace = true
|
||||||
|
serde.workspace = true
|
||||||
|
serde_json.workspace = true
|
||||||
|
|
||||||
|
proxmox-lang.workspace = true
|
||||||
|
proxmox-serde.workspace = true
|
||||||
|
proxmox-sys.workspace = true
|
||||||
|
proxmox-time.workspace = true
|
||||||
|
|
||||||
|
pbs-api-types.workspace = true
|
||||||
|
pbs-tools.workspace = true
|
@ -37,5 +37,6 @@ pbs-client.workspace = true
|
|||||||
pbs-config.workspace = true
|
pbs-config.workspace = true
|
||||||
pbs-datastore.workspace = true
|
pbs-datastore.workspace = true
|
||||||
pbs-fuse-loop.workspace = true
|
pbs-fuse-loop.workspace = true
|
||||||
|
pbs-key-config.workspace = true
|
||||||
pbs-pxar-fuse.workspace = true
|
pbs-pxar-fuse.workspace = true
|
||||||
pbs-tools.workspace = true
|
pbs-tools.workspace = true
|
||||||
|
@ -17,8 +17,8 @@ use proxmox_schema::{api, ApiType, ReturnType};
|
|||||||
use pbs_api_types::{BackupNamespace, BackupType};
|
use pbs_api_types::{BackupNamespace, BackupType};
|
||||||
use pbs_client::tools::key_source::get_encryption_key_password;
|
use pbs_client::tools::key_source::get_encryption_key_password;
|
||||||
use pbs_client::{BackupRepository, BackupWriter};
|
use pbs_client::{BackupRepository, BackupWriter};
|
||||||
use pbs_config::key_config::{load_and_decrypt_key, KeyDerivationConfig};
|
|
||||||
use pbs_datastore::data_blob::{DataBlob, DataChunkBuilder};
|
use pbs_datastore::data_blob::{DataBlob, DataChunkBuilder};
|
||||||
|
use pbs_key_config::{load_and_decrypt_key, KeyDerivationConfig};
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
@ -17,8 +17,8 @@ use pbs_client::tools::key_source::{
|
|||||||
find_default_encryption_key, find_default_master_pubkey, get_encryption_key_password,
|
find_default_encryption_key, find_default_master_pubkey, get_encryption_key_password,
|
||||||
place_default_encryption_key, place_default_master_pubkey,
|
place_default_encryption_key, place_default_master_pubkey,
|
||||||
};
|
};
|
||||||
use pbs_config::key_config::{rsa_decrypt_key_config, KeyConfig};
|
|
||||||
use pbs_datastore::paperkey::{generate_paper_key, PaperkeyFormat};
|
use pbs_datastore::paperkey::{generate_paper_key, PaperkeyFormat};
|
||||||
|
use pbs_key_config::{rsa_decrypt_key_config, KeyConfig};
|
||||||
|
|
||||||
#[api]
|
#[api]
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
|
@ -46,7 +46,6 @@ use pbs_client::{
|
|||||||
FixedChunkStream, HttpClient, PxarBackupStream, RemoteChunkReader, UploadOptions,
|
FixedChunkStream, HttpClient, PxarBackupStream, RemoteChunkReader, UploadOptions,
|
||||||
BACKUP_SOURCE_SCHEMA,
|
BACKUP_SOURCE_SCHEMA,
|
||||||
};
|
};
|
||||||
use pbs_config::key_config::{decrypt_key, rsa_encrypt_key_config, KeyConfig};
|
|
||||||
use pbs_datastore::catalog::{BackupCatalogWriter, CatalogReader, CatalogWriter};
|
use pbs_datastore::catalog::{BackupCatalogWriter, CatalogReader, CatalogWriter};
|
||||||
use pbs_datastore::chunk_store::verify_chunk_size;
|
use pbs_datastore::chunk_store::verify_chunk_size;
|
||||||
use pbs_datastore::dynamic_index::{BufferedDynamicReader, DynamicIndexReader};
|
use pbs_datastore::dynamic_index::{BufferedDynamicReader, DynamicIndexReader};
|
||||||
@ -57,6 +56,7 @@ use pbs_datastore::manifest::{
|
|||||||
};
|
};
|
||||||
use pbs_datastore::read_chunk::AsyncReadChunk;
|
use pbs_datastore::read_chunk::AsyncReadChunk;
|
||||||
use pbs_datastore::CATALOG_NAME;
|
use pbs_datastore::CATALOG_NAME;
|
||||||
|
use pbs_key_config::{decrypt_key, rsa_encrypt_key_config, KeyConfig};
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
use pbs_tools::json;
|
use pbs_tools::json;
|
||||||
|
|
||||||
|
@ -20,10 +20,10 @@ use proxmox_sys::sortable;
|
|||||||
use pbs_api_types::BackupNamespace;
|
use pbs_api_types::BackupNamespace;
|
||||||
use pbs_client::tools::key_source::get_encryption_key_password;
|
use pbs_client::tools::key_source::get_encryption_key_password;
|
||||||
use pbs_client::{BackupReader, RemoteChunkReader};
|
use pbs_client::{BackupReader, RemoteChunkReader};
|
||||||
use pbs_config::key_config::load_and_decrypt_key;
|
|
||||||
use pbs_datastore::cached_chunk_reader::CachedChunkReader;
|
use pbs_datastore::cached_chunk_reader::CachedChunkReader;
|
||||||
use pbs_datastore::dynamic_index::BufferedDynamicReader;
|
use pbs_datastore::dynamic_index::BufferedDynamicReader;
|
||||||
use pbs_datastore::index::IndexFile;
|
use pbs_datastore::index::IndexFile;
|
||||||
|
use pbs_key_config::load_and_decrypt_key;
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
use pbs_tools::json::required_string_param;
|
use pbs_tools::json::required_string_param;
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@ use proxmox_sys::fs::file_get_contents;
|
|||||||
|
|
||||||
use pbs_api_types::{BackupGroup, BackupNamespace, CryptMode, SnapshotListItem};
|
use pbs_api_types::{BackupGroup, BackupNamespace, CryptMode, SnapshotListItem};
|
||||||
use pbs_client::tools::key_source::get_encryption_key_password;
|
use pbs_client::tools::key_source::get_encryption_key_password;
|
||||||
use pbs_config::key_config::decrypt_key;
|
|
||||||
use pbs_datastore::DataBlob;
|
use pbs_datastore::DataBlob;
|
||||||
|
use pbs_key_config::decrypt_key;
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
use pbs_tools::json::required_string_param;
|
use pbs_tools::json::required_string_param;
|
||||||
|
|
||||||
|
@ -32,4 +32,5 @@ pbs-buildcfg.workspace = true
|
|||||||
pbs-client.workspace = true
|
pbs-client.workspace = true
|
||||||
pbs-config.workspace = true
|
pbs-config.workspace = true
|
||||||
pbs-datastore.workspace = true
|
pbs-datastore.workspace = true
|
||||||
|
pbs-key-config.workspace = true
|
||||||
pbs-tools.workspace = true
|
pbs-tools.workspace = true
|
||||||
|
@ -31,11 +31,11 @@ use pbs_client::tools::{
|
|||||||
REPO_URL_SCHEMA,
|
REPO_URL_SCHEMA,
|
||||||
};
|
};
|
||||||
use pbs_client::{BackupReader, BackupRepository, RemoteChunkReader};
|
use pbs_client::{BackupReader, BackupRepository, RemoteChunkReader};
|
||||||
use pbs_config::key_config::decrypt_key;
|
|
||||||
use pbs_datastore::catalog::{ArchiveEntry, CatalogReader, DirEntryAttribute};
|
use pbs_datastore::catalog::{ArchiveEntry, CatalogReader, DirEntryAttribute};
|
||||||
use pbs_datastore::dynamic_index::{BufferedDynamicReader, LocalDynamicReadAt};
|
use pbs_datastore::dynamic_index::{BufferedDynamicReader, LocalDynamicReadAt};
|
||||||
use pbs_datastore::index::IndexFile;
|
use pbs_datastore::index::IndexFile;
|
||||||
use pbs_datastore::CATALOG_NAME;
|
use pbs_datastore::CATALOG_NAME;
|
||||||
|
use pbs_key_config::decrypt_key;
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
|
|
||||||
pub mod block_driver;
|
pub mod block_driver;
|
||||||
|
@ -12,11 +12,11 @@ use pbs_api_types::{
|
|||||||
|
|
||||||
use pbs_config::CachedUserInfo;
|
use pbs_config::CachedUserInfo;
|
||||||
|
|
||||||
use pbs_config::key_config::KeyConfig;
|
|
||||||
use pbs_config::open_backup_lockfile;
|
use pbs_config::open_backup_lockfile;
|
||||||
use pbs_config::tape_encryption_keys::{
|
use pbs_config::tape_encryption_keys::{
|
||||||
insert_key, load_key_configs, load_keys, save_key_configs, save_keys, TAPE_KEYS_LOCKFILE,
|
insert_key, load_key_configs, load_keys, save_key_configs, save_keys, TAPE_KEYS_LOCKFILE,
|
||||||
};
|
};
|
||||||
|
use pbs_key_config::KeyConfig;
|
||||||
|
|
||||||
#[api(
|
#[api(
|
||||||
input: {
|
input: {
|
||||||
|
@ -21,9 +21,9 @@ use pbs_client::tools::{
|
|||||||
REPO_URL_SCHEMA,
|
REPO_URL_SCHEMA,
|
||||||
};
|
};
|
||||||
use pbs_client::{BackupReader, BackupRepository, RemoteChunkReader};
|
use pbs_client::{BackupReader, BackupRepository, RemoteChunkReader};
|
||||||
use pbs_config::key_config::decrypt_key;
|
|
||||||
use pbs_datastore::dynamic_index::{BufferedDynamicReader, DynamicIndexReader, LocalDynamicReadAt};
|
use pbs_datastore::dynamic_index::{BufferedDynamicReader, DynamicIndexReader, LocalDynamicReadAt};
|
||||||
use pbs_datastore::index::IndexFile;
|
use pbs_datastore::index::IndexFile;
|
||||||
|
use pbs_key_config::decrypt_key;
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
use pxar::accessor::ReadAt;
|
use pxar::accessor::ReadAt;
|
||||||
use pxar::EntryKind;
|
use pxar::EntryKind;
|
||||||
|
@ -15,7 +15,6 @@ use proxmox_router::cli::{
|
|||||||
use proxmox_schema::api;
|
use proxmox_schema::api;
|
||||||
|
|
||||||
use pbs_client::tools::key_source::get_encryption_key_password;
|
use pbs_client::tools::key_source::get_encryption_key_password;
|
||||||
use pbs_config::key_config::load_and_decrypt_key;
|
|
||||||
use pbs_datastore::dynamic_index::DynamicIndexReader;
|
use pbs_datastore::dynamic_index::DynamicIndexReader;
|
||||||
use pbs_datastore::file_formats::{
|
use pbs_datastore::file_formats::{
|
||||||
COMPRESSED_BLOB_MAGIC_1_0, DYNAMIC_SIZED_CHUNK_INDEX_1_0, ENCRYPTED_BLOB_MAGIC_1_0,
|
COMPRESSED_BLOB_MAGIC_1_0, DYNAMIC_SIZED_CHUNK_INDEX_1_0, ENCRYPTED_BLOB_MAGIC_1_0,
|
||||||
@ -24,6 +23,7 @@ use pbs_datastore::file_formats::{
|
|||||||
use pbs_datastore::fixed_index::FixedIndexReader;
|
use pbs_datastore::fixed_index::FixedIndexReader;
|
||||||
use pbs_datastore::index::IndexFile;
|
use pbs_datastore::index::IndexFile;
|
||||||
use pbs_datastore::DataBlob;
|
use pbs_datastore::DataBlob;
|
||||||
|
use pbs_key_config::load_and_decrypt_key;
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
|
|
||||||
/// Decodes a blob and writes its content either to stdout or into a file
|
/// Decodes a blob and writes its content either to stdout or into a file
|
||||||
|
@ -8,12 +8,12 @@ use proxmox_router::cli::{CliCommand, CliCommandMap, CommandLineInterface};
|
|||||||
use proxmox_schema::api;
|
use proxmox_schema::api;
|
||||||
|
|
||||||
use pbs_client::tools::key_source::get_encryption_key_password;
|
use pbs_client::tools::key_source::get_encryption_key_password;
|
||||||
use pbs_config::key_config::load_and_decrypt_key;
|
|
||||||
use pbs_datastore::dynamic_index::DynamicIndexReader;
|
use pbs_datastore::dynamic_index::DynamicIndexReader;
|
||||||
use pbs_datastore::file_formats::{DYNAMIC_SIZED_CHUNK_INDEX_1_0, FIXED_SIZED_CHUNK_INDEX_1_0};
|
use pbs_datastore::file_formats::{DYNAMIC_SIZED_CHUNK_INDEX_1_0, FIXED_SIZED_CHUNK_INDEX_1_0};
|
||||||
use pbs_datastore::fixed_index::FixedIndexReader;
|
use pbs_datastore::fixed_index::FixedIndexReader;
|
||||||
use pbs_datastore::index::IndexFile;
|
use pbs_datastore::index::IndexFile;
|
||||||
use pbs_datastore::DataBlob;
|
use pbs_datastore::DataBlob;
|
||||||
|
use pbs_key_config::load_and_decrypt_key;
|
||||||
use pbs_tools::crypt_config::CryptConfig;
|
use pbs_tools::crypt_config::CryptConfig;
|
||||||
|
|
||||||
#[api(
|
#[api(
|
||||||
|
@ -10,9 +10,9 @@ use pbs_api_types::{
|
|||||||
TAPE_ENCRYPTION_KEY_FINGERPRINT_SCHEMA,
|
TAPE_ENCRYPTION_KEY_FINGERPRINT_SCHEMA,
|
||||||
};
|
};
|
||||||
|
|
||||||
use pbs_config::key_config::KeyConfig;
|
|
||||||
use pbs_config::tape_encryption_keys::{complete_key_fingerprint, load_key_configs};
|
use pbs_config::tape_encryption_keys::{complete_key_fingerprint, load_key_configs};
|
||||||
use pbs_datastore::paperkey::{generate_paper_key, PaperkeyFormat};
|
use pbs_datastore::paperkey::{generate_paper_key, PaperkeyFormat};
|
||||||
|
use pbs_key_config::KeyConfig;
|
||||||
|
|
||||||
use proxmox_backup::api2;
|
use proxmox_backup::api2;
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ use proxmox_uuid::Uuid;
|
|||||||
use pbs_api_types::{
|
use pbs_api_types::{
|
||||||
Fingerprint, Lp17VolumeStatistics, LtoDriveAndMediaStatus, LtoTapeDrive, MamAttribute,
|
Fingerprint, Lp17VolumeStatistics, LtoDriveAndMediaStatus, LtoTapeDrive, MamAttribute,
|
||||||
};
|
};
|
||||||
use pbs_config::key_config::KeyConfig;
|
use pbs_key_config::KeyConfig;
|
||||||
use pbs_tape::{
|
use pbs_tape::{
|
||||||
linux_list_drives::open_lto_tape_device,
|
linux_list_drives::open_lto_tape_device,
|
||||||
sg_tape::{SgTape, TapeAlertFlags},
|
sg_tape::{SgTape, TapeAlertFlags},
|
||||||
|
@ -23,7 +23,7 @@ use proxmox_sys::{task_log, WorkerTaskContext};
|
|||||||
use proxmox_uuid::Uuid;
|
use proxmox_uuid::Uuid;
|
||||||
|
|
||||||
use pbs_api_types::{Fingerprint, LtoTapeDrive, VirtualTapeDrive};
|
use pbs_api_types::{Fingerprint, LtoTapeDrive, VirtualTapeDrive};
|
||||||
use pbs_config::key_config::KeyConfig;
|
use pbs_key_config::KeyConfig;
|
||||||
|
|
||||||
use pbs_tape::{sg_tape::TapeAlertFlags, BlockReadError, MediaContentHeader, TapeRead, TapeWrite};
|
use pbs_tape::{sg_tape::TapeAlertFlags, BlockReadError, MediaContentHeader, TapeRead, TapeWrite};
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
use proxmox_sys::fs::{replace_file, CreateOptions};
|
use proxmox_sys::fs::{replace_file, CreateOptions};
|
||||||
|
|
||||||
use pbs_config::key_config::KeyConfig;
|
use pbs_key_config::KeyConfig;
|
||||||
use pbs_tape::{
|
use pbs_tape::{
|
||||||
BlockReadError, BlockedReader, BlockedWriter, DriveStatus, ElementStatus, EmulateTapeReader,
|
BlockReadError, BlockedReader, BlockedWriter, DriveStatus, ElementStatus, EmulateTapeReader,
|
||||||
EmulateTapeWriter, MediaContentHeader, MtxStatus, StorageElementStatus, TapeRead, TapeWrite,
|
EmulateTapeWriter, MediaContentHeader, MtxStatus, StorageElementStatus, TapeRead, TapeWrite,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user