summaryrefslogtreecommitdiff
path: root/src/key.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/key.rs')
-rw-r--r--src/key.rs43
1 files changed, 30 insertions, 13 deletions
diff --git a/src/key.rs b/src/key.rs
index c20103b5..b8ddcd02 100644
--- a/src/key.rs
+++ b/src/key.rs
@@ -1,10 +1,13 @@
-use std::{fmt, fs, io::{stdin, IsTerminal}};
+use std::{
+ fmt, fs,
+ io::{stdin, IsTerminal},
+};
-use log::info;
-use bch_bindgen::bcachefs::bch_sb_handle;
-use clap::builder::PossibleValue;
use crate::c_str;
use anyhow::anyhow;
+use bch_bindgen::bcachefs::bch_sb_handle;
+use clap::builder::PossibleValue;
+use log::info;
#[derive(Clone, Debug)]
pub enum UnlockPolicy {
@@ -18,11 +21,11 @@ impl std::str::FromStr for UnlockPolicy {
type Err = anyhow::Error;
fn from_str(s: &str) -> anyhow::Result<Self> {
match s {
- ""|"none" => Ok(UnlockPolicy::None),
- "fail" => Ok(UnlockPolicy::Fail),
- "wait" => Ok(UnlockPolicy::Wait),
- "ask" => Ok(UnlockPolicy::Ask),
- _ => Err(anyhow!("Invalid unlock policy provided")),
+ "" | "none" => Ok(UnlockPolicy::None),
+ "fail" => Ok(UnlockPolicy::Fail),
+ "wait" => Ok(UnlockPolicy::Wait),
+ "ask" => Ok(UnlockPolicy::Ask),
+ _ => Err(anyhow!("Invalid unlock policy provided")),
}
}
}
@@ -152,18 +155,32 @@ fn unlock_master_key(sb: &bch_sb_handle, passphrase: &str) -> anyhow::Result<()>
}
}
-pub fn read_from_passphrase_file(block_device: &bch_sb_handle, passphrase_file: &std::path::Path) -> anyhow::Result<()> {
+pub fn read_from_passphrase_file(
+ block_device: &bch_sb_handle,
+ passphrase_file: &std::path::Path,
+) -> anyhow::Result<()> {
// Attempts to unlock the master key by password_file
// Return true if unlock was successful, false otherwise
- info!("Attempting to unlock master key for filesystem {}, using password from file {}", block_device.sb().uuid(), passphrase_file.display());
+ info!(
+ "Attempting to unlock master key for filesystem {}, using password from file {}",
+ block_device.sb().uuid(),
+ passphrase_file.display()
+ );
// Read the contents of the password_file into a string
let passphrase = fs::read_to_string(passphrase_file)?;
// Call decrypt_master_key with the read string
unlock_master_key(block_device, &passphrase)
}
-pub fn apply_key_unlocking_policy(block_device: &bch_sb_handle, unlock_policy: UnlockPolicy) -> anyhow::Result<()> {
- info!("Attempting to unlock master key for filesystem {}, using unlock policy {}", block_device.sb().uuid(), unlock_policy);
+pub fn apply_key_unlocking_policy(
+ block_device: &bch_sb_handle,
+ unlock_policy: UnlockPolicy,
+) -> anyhow::Result<()> {
+ info!(
+ "Attempting to unlock master key for filesystem {}, using unlock policy {}",
+ block_device.sb().uuid(),
+ unlock_policy
+ );
match unlock_policy {
UnlockPolicy::Fail => Err(anyhow!("no passphrase available")),
UnlockPolicy::Wait => Ok(wait_for_unlock(&block_device.sb().uuid())?),