diff options
Diffstat (limited to 'src/key.rs')
-rw-r--r-- | src/key.rs | 43 |
1 files changed, 30 insertions, 13 deletions
@@ -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())?), |