mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-02-09 00:00:04 +03:00
fix(key): search for key in all relevant keyrings
Previously, using `bcachefs unlock -k session` would still cause mount to ask for a passphrase. Signed-off-by: Thomas Mühlbacher <tmuehlbacher@posteo.net>
This commit is contained in:
parent
e4271d7a3e
commit
f72ded6a4f
25
src/key.rs
25
src/key.rs
@ -110,25 +110,32 @@ impl KeyHandle {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_from_search(uuid: &Uuid) -> Result<Self> {
|
fn search_keyring(keyring: i32, key_name: &CStr) -> Result<i64> {
|
||||||
let key_name = Self::format_key_name(uuid);
|
let key_name = CStr::as_ptr(key_name);
|
||||||
let key_name = CStr::as_ptr(&key_name);
|
|
||||||
let key_type = c_str!("user");
|
let key_type = c_str!("user");
|
||||||
|
|
||||||
let key_id =
|
let key_id = unsafe { keyctl_search(keyring, key_type, key_name, 0) };
|
||||||
unsafe { keyctl_search(keyutils::KEY_SPEC_USER_KEYRING, key_type, key_name, 0) };
|
|
||||||
|
|
||||||
if key_id > 0 {
|
if key_id > 0 {
|
||||||
info!("Found key in keyring");
|
info!("Found key in keyring");
|
||||||
Ok(Self {
|
Ok(key_id)
|
||||||
_uuid: *uuid,
|
|
||||||
_id: key_id,
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
Err(ErrnoError(errno::errno()).into())
|
Err(ErrnoError(errno::errno()).into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn new_from_search(uuid: &Uuid) -> Result<Self> {
|
||||||
|
let key_name = Self::format_key_name(uuid);
|
||||||
|
|
||||||
|
Self::search_keyring(keyutils::KEY_SPEC_SESSION_KEYRING, &key_name)
|
||||||
|
.or_else(|_| Self::search_keyring(keyutils::KEY_SPEC_USER_KEYRING, &key_name))
|
||||||
|
.or_else(|_| Self::search_keyring(keyutils::KEY_SPEC_USER_SESSION_KEYRING, &key_name))
|
||||||
|
.map(|id| Self {
|
||||||
|
_uuid: *uuid,
|
||||||
|
_id: id,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn wait_for_unlock(uuid: &Uuid) -> Result<Self> {
|
fn wait_for_unlock(uuid: &Uuid) -> Result<Self> {
|
||||||
loop {
|
loop {
|
||||||
match Self::new_from_search(uuid) {
|
match Self::new_from_search(uuid) {
|
||||||
|
Loading…
Reference in New Issue
Block a user