diff --git a/userspace/ksud/src/restorecon.rs b/userspace/ksud/src/restorecon.rs index f1f32e83..1ea08e29 100644 --- a/userspace/ksud/src/restorecon.rs +++ b/userspace/ksud/src/restorecon.rs @@ -1,5 +1,6 @@ use anyhow::Result; use jwalk::{Parallelism::Serial, WalkDir}; +use std::path::Path; #[cfg(unix)] use anyhow::{Context, Ok}; @@ -8,29 +9,30 @@ use extattr::{setxattr, Flags as XattrFlags}; const SYSTEM_CON: &str = "u:object_r:system_file:s0"; const _ADB_CON: &str = "u:object_r:adb_data_file:s0"; +const SELINUX_XATTR : &str = "security.selinux"; -pub fn setcon(path: &str, con: &str) -> Result<()> { +pub fn setcon>(path: P, con: &str) -> Result<()> { #[cfg(unix)] - setxattr(path, "security.selinux", con, XattrFlags::empty()) - .with_context(|| format!("Failed to change SELinux context for {path}"))?; + setxattr(&path, SELINUX_XATTR, con, XattrFlags::empty()) + .with_context(|| format!("Failed to change SELinux context for {}", path.as_ref().display()))?; Ok(()) } #[cfg(unix)] -pub fn setsyscon(path: &str) -> Result<()> { +pub fn setsyscon>(path: P) -> Result<()> { setcon(path, SYSTEM_CON) } #[cfg(not(unix))] -pub fn setsyscon(_path: &str) -> Result<()> { +pub fn setsyscon>(path: P) -> Result<()> { unimplemented!() } -pub fn restore_syscon(dir: &str) -> Result<()> { +pub fn restore_syscon>(dir: P) -> Result<()> { for dir_entry in WalkDir::new(dir).parallelism(Serial) { if let Some(path) = dir_entry.ok().map(|dir_entry| dir_entry.path()) { #[cfg(unix)] - setxattr(&path, "security.selinux", SYSTEM_CON, XattrFlags::empty()).with_context( + setxattr(&path, SELINUX_XATTR, SYSTEM_CON, XattrFlags::empty()).with_context( || format!("Failed to change SELinux context for {}", path.display()), )?; }