diff --git a/src/uu/cp/src/copydir.rs b/src/uu/cp/src/copydir.rs index 0c0b10af60e..5c92ebfef74 100644 --- a/src/uu/cp/src/copydir.rs +++ b/src/uu/cp/src/copydir.rs @@ -26,7 +26,7 @@ use uucore::translate; use uucore::uio_error; use walkdir::{DirEntry, WalkDir}; -#[cfg(all(feature = "selinux", target_os = "linux"))] +#[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] use crate::set_selinux_context; use crate::{ CopyMode, CopyResult, CpError, Options, aligned_ancestors, context_for, copy_attributes, @@ -563,7 +563,7 @@ pub(crate) fn copy_directory( options.set_selinux_context, )?; - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] if options.set_selinux_context { set_selinux_context(&dir.dest, options.context.as_ref())?; } @@ -583,7 +583,7 @@ pub(crate) fn copy_directory( options.set_selinux_context, )?; - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] if options.set_selinux_context { set_selinux_context(y, options.context.as_ref())?; } diff --git a/src/uu/cp/src/cp.rs b/src/uu/cp/src/cp.rs index 8f6ec6560b2..cda57ed0fb0 100644 --- a/src/uu/cp/src/cp.rs +++ b/src/uu/cp/src/cp.rs @@ -896,11 +896,11 @@ impl Attributes { mode: Preserve::Yes { required: true }, timestamps: Preserve::Yes { required: true }, context: { - #[cfg(feature = "feat_selinux")] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] { Preserve::Yes { required: false } } - #[cfg(not(feature = "feat_selinux"))] + #[cfg(not(all(feature = "selinux", any(target_os = "linux", target_os = "android"))))] { Preserve::No { explicit: false } } @@ -1141,7 +1141,7 @@ impl Options { } } - #[cfg(not(feature = "selinux"))] + #[cfg(not(all(feature = "selinux", any(target_os = "linux", target_os = "android"))))] if let Preserve::Yes { required } = attributes.context { let selinux_disabled_error = CpError::Error(translate!("cp-error-selinux-not-enabled")); if required { @@ -1692,7 +1692,7 @@ fn handle_preserve CopyResult<()>>(p: Preserve, f: F) -> CopyResult<( Ok(()) } -#[cfg(all(feature = "selinux", target_os = "linux"))] +#[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] pub(crate) fn set_selinux_context(path: &Path, context: Option<&String>) -> CopyResult<()> { if !uucore::selinux::is_selinux_enabled() { return Ok(()); @@ -2670,7 +2670,7 @@ fn copy_file( fs::File::create(dest).map(|f| f.set_len(0)).ok(); })?; - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] if options.set_selinux_context { set_selinux_context(dest, options.context.as_ref())?; } diff --git a/src/uu/install/src/install.rs b/src/uu/install/src/install.rs index f19f8aca249..d85f5432e1b 100644 --- a/src/uu/install/src/install.rs +++ b/src/uu/install/src/install.rs @@ -489,7 +489,7 @@ fn directory(paths: &[OsString], b: &Behavior) -> UResult<()> { } // Set SELinux context for all created directories if needed - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] if should_set_selinux_context(b) { let context = get_context_for_selinux(b); set_selinux_context_for_directories_install(path_to_create.as_path(), context); @@ -514,7 +514,7 @@ fn directory(paths: &[OsString], b: &Behavior) -> UResult<()> { show_if_err!(chown_optional_user_group(path, b)); // Set SELinux context for directory if needed - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] if b.default_context { show_if_err!(set_selinux_default_context(path)); } else if b.context.is_some() { @@ -683,7 +683,10 @@ fn standard(mut paths: Vec, b: &Behavior) -> UResult<()> { } // Set SELinux context for all created directories if needed - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all( + feature = "selinux", + any(target_os = "linux", target_os = "android") + ))] if should_set_selinux_context(b) { let context = get_context_for_selinux(b); set_selinux_context_for_directories_install(to_create, context); @@ -717,7 +720,10 @@ fn standard(mut paths: Vec, b: &Behavior) -> UResult<()> { } // Set SELinux context for all created directories if needed - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all( + feature = "selinux", + any(target_os = "linux", target_os = "android") + ))] if should_set_selinux_context(b) { let context = get_context_for_selinux(b); set_selinux_context_for_directories_install(to_create, context); @@ -1090,7 +1096,7 @@ fn finalize_installed_file( preserve_timestamps(from, to)?; } - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] if b.privileged { if b.preserve_context { uucore::selinux::preserve_security_context(from, to) @@ -1154,7 +1160,7 @@ fn get_context_for_selinux(b: &Behavior) -> Option<&String> { } } -#[cfg(all(feature = "selinux", target_os = "linux"))] +#[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] fn should_set_selinux_context(b: &Behavior) -> bool { b.privileged && (b.context.is_some() || b.default_context) } @@ -1250,7 +1256,7 @@ fn need_copy(from: &Path, to: &Path, b: &Behavior) -> bool { } if b.privileged { - #[cfg(all(feature = "selinux", target_os = "linux"))] + #[cfg(all(feature = "selinux", any(target_os = "linux", target_os = "android")))] if b.preserve_context && contexts_differ(from, to) { return true; } diff --git a/tests/by-util/test_cp.rs b/tests/by-util/test_cp.rs index 8a178d1725d..1b3fde67814 100644 --- a/tests/by-util/test_cp.rs +++ b/tests/by-util/test_cp.rs @@ -1830,7 +1830,10 @@ fn test_cp_preserve_xattr() { } #[test] -#[cfg(all(target_os = "linux", not(feature = "feat_selinux")))] +#[cfg(all( + not(feature = "feat_selinux"), + any(target_os = "linux", target_os = "android") +))] fn test_cp_preserve_all_context_fails_on_non_selinux() { new_ucmd!() .arg(TEST_COPY_FROM_FOLDER_FILE) @@ -6802,7 +6805,10 @@ fn test_cp_selinux() { } #[test] -#[cfg(feature = "feat_selinux")] +#[cfg(all( + feature = "feat_selinux", + any(target_os = "linux", target_os = "android") +))] fn test_cp_selinux_invalid() { let scene = TestScenario::new(util_name!()); let at = &scene.fixtures; @@ -7871,7 +7877,10 @@ fn test_cp_a_preserves_context() { } #[test] -#[cfg(feature = "feat_selinux")] +#[cfg(all( + feature = "feat_selinux", + any(target_os = "linux", target_os = "android") +))] fn test_cp_preserve_context_with_z_fails() { let (at, mut ucmd) = at_and_ucmd!(); at.touch("src");