Merge pull request #251 from tasleson/handle_dev_symlink

mount: canonicalize device path for single device node
This commit is contained in:
koverstreet 2024-04-15 18:25:41 -04:00 committed by GitHub
commit cf44deafe6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4,6 +4,7 @@ use clap::Parser;
use uuid::Uuid; use uuid::Uuid;
use std::io::{stdout, IsTerminal}; use std::io::{stdout, IsTerminal};
use std::path::PathBuf; use std::path::PathBuf;
use std::fs;
use crate::key; use crate::key;
use crate::key::UnlockPolicy; use crate::key::UnlockPolicy;
use std::ffi::{CString, c_char, c_void}; use std::ffi::{CString, c_char, c_void};
@ -125,11 +126,13 @@ fn get_devices_by_uuid(uuid: Uuid) -> anyhow::Result<Vec<(PathBuf, bch_sb_handle
fn get_uuid_for_dev_node(device: &std::path::PathBuf) -> anyhow::Result<Option<Uuid>> { fn get_uuid_for_dev_node(device: &std::path::PathBuf) -> anyhow::Result<Option<Uuid>> {
let mut udev = udev::Enumerator::new()?; let mut udev = udev::Enumerator::new()?;
let canonical = fs::canonicalize(device)?;
udev.match_subsystem("block")?; udev.match_subsystem("block")?;
for dev in udev.scan_devices()?.into_iter() { for dev in udev.scan_devices()?.into_iter() {
if let Some(devnode) = dev.devnode() { if let Some(devnode) = dev.devnode() {
if devnode == device { if devnode == canonical {
let devnode_owned = devnode.to_owned(); let devnode_owned = devnode.to_owned();
let sb_result = read_super_silent(&devnode_owned); let sb_result = read_super_silent(&devnode_owned);
if let Ok(sb) = sb_result { if let Ok(sb) = sb_result {