fix reading keys from non-tty inputs

read_password_from_tty doesn't have a fallback if input is a pipe.
This makes scripting and integration testing harder.

Noticed while updating our nixos integration test.

Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
This commit is contained in:
Jörg Thalheim 2023-06-15 19:08:41 +02:00
parent 3ab89de5fa
commit 9090bf3c36

View File

@ -72,7 +72,13 @@ fn ask_for_key(sb: &bch_sb_handle) -> anyhow::Result<()> {
let bch_key_magic = BCH_KEY_MAGIC.as_bytes().read_u64::<LittleEndian>().unwrap(); let bch_key_magic = BCH_KEY_MAGIC.as_bytes().read_u64::<LittleEndian>().unwrap();
let crypt = sb.sb().crypt().unwrap(); let crypt = sb.sb().crypt().unwrap();
let pass = rpassword::read_password_from_tty(Some("Enter passphrase: "))?; let pass = if atty::is(atty::Stream::Stdin) {
rpassword::read_password_from_tty(Some("Enter passphrase: "))?
} else {
let mut line = String::new();
std::io::stdin().read_line(&mut line)?;
line
};
let pass = std::ffi::CString::new(pass.trim_end())?; // bind to keep the CString alive let pass = std::ffi::CString::new(pass.trim_end())?; // bind to keep the CString alive
let mut output: bch_key = unsafe { let mut output: bch_key = unsafe {
bcachefs::derive_passphrase( bcachefs::derive_passphrase(