mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-30 04:27:45 +00:00
move the file_has_acl function into uucore
This commit is contained in:
parent
2ec4e9f784
commit
66637a6503
4 changed files with 41 additions and 19 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -2608,7 +2608,6 @@ dependencies = [
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
"uucore",
|
"uucore",
|
||||||
"uutils_term_grid",
|
"uutils_term_grid",
|
||||||
"xattr",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -27,6 +27,7 @@ uucore = { workspace = true, features = [
|
||||||
"colors",
|
"colors",
|
||||||
"entries",
|
"entries",
|
||||||
"fs",
|
"fs",
|
||||||
|
"fsxattr",
|
||||||
"quoting-style",
|
"quoting-style",
|
||||||
"version-cmp",
|
"version-cmp",
|
||||||
] }
|
] }
|
||||||
|
@ -34,9 +35,6 @@ once_cell = { workspace = true }
|
||||||
selinux = { workspace = true, optional = true }
|
selinux = { workspace = true, optional = true }
|
||||||
hostname = { workspace = true }
|
hostname = { workspace = true }
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
|
||||||
xattr = { workspace = true }
|
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "ls"
|
name = "ls"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
// For the full copyright and license information, please view the LICENSE
|
// For the full copyright and license information, please view the LICENSE
|
||||||
// file that was distributed with this source code.
|
// file that was distributed with this source code.
|
||||||
|
|
||||||
// spell-checker:ignore (ToDO) somegroup nlink tabsize dired subdired dtype colorterm getxattr
|
// spell-checker:ignore (ToDO) somegroup nlink tabsize dired subdired dtype colorterm
|
||||||
|
|
||||||
use clap::{
|
use clap::{
|
||||||
builder::{NonEmptyStringValueParser, ValueParser},
|
builder::{NonEmptyStringValueParser, ValueParser},
|
||||||
|
@ -36,7 +36,8 @@ use std::{
|
||||||
};
|
};
|
||||||
use term_grid::{Cell, Direction, Filling, Grid, GridOptions};
|
use term_grid::{Cell, Direction, Filling, Grid, GridOptions};
|
||||||
use unicode_width::UnicodeWidthStr;
|
use unicode_width::UnicodeWidthStr;
|
||||||
|
#[cfg(all(unix, not(any(target_os = "android", target_os = "macos"))))]
|
||||||
|
use uucore::fsxattr::has_acl;
|
||||||
#[cfg(any(
|
#[cfg(any(
|
||||||
target_os = "linux",
|
target_os = "linux",
|
||||||
target_os = "macos",
|
target_os = "macos",
|
||||||
|
@ -2621,18 +2622,6 @@ fn display_grid(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(unix, not(any(target_os = "android", target_os = "macos"))))]
|
|
||||||
fn file_has_acl<P: AsRef<Path>>(file: P) -> bool {
|
|
||||||
// don't use exacl here, it is doing more getxattr call then needed
|
|
||||||
match xattr::list(file) {
|
|
||||||
Ok(acl) => {
|
|
||||||
// if we have extra attributes, we have an acl
|
|
||||||
acl.count() > 0
|
|
||||||
}
|
|
||||||
Err(_) => false,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// This writes to the BufWriter out a single string of the output of `ls -l`.
|
/// This writes to the BufWriter out a single string of the output of `ls -l`.
|
||||||
///
|
///
|
||||||
/// It writes the following keys, in order:
|
/// It writes the following keys, in order:
|
||||||
|
@ -2680,7 +2669,7 @@ fn display_item_long(
|
||||||
// TODO: See how Mac should work here
|
// TODO: See how Mac should work here
|
||||||
let is_acl_set = false;
|
let is_acl_set = false;
|
||||||
#[cfg(all(unix, not(any(target_os = "android", target_os = "macos"))))]
|
#[cfg(all(unix, not(any(target_os = "android", target_os = "macos"))))]
|
||||||
let is_acl_set = file_has_acl(item.display_name.as_os_str());
|
let is_acl_set = has_acl(item.display_name.as_os_str());
|
||||||
write!(
|
write!(
|
||||||
output_display,
|
output_display,
|
||||||
"{}{}{} {}",
|
"{}{}{} {}",
|
||||||
|
|
|
@ -66,6 +66,26 @@ pub fn apply_xattrs<P: AsRef<Path>>(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Checks if a file has an Access Control List (ACL) based on its extended attributes.
|
||||||
|
///
|
||||||
|
/// # Arguments
|
||||||
|
///
|
||||||
|
/// * `file` - A reference to the path of the file.
|
||||||
|
///
|
||||||
|
/// # Returns
|
||||||
|
///
|
||||||
|
/// `true` if the file has extended attributes (indicating an ACL), `false` otherwise.
|
||||||
|
pub fn has_acl<P: AsRef<Path>>(file: P) -> bool {
|
||||||
|
// don't use exacl here, it is doing more getxattr call then needed
|
||||||
|
match xattr::list(file) {
|
||||||
|
Ok(acl) => {
|
||||||
|
// if we have extra attributes, we have an acl
|
||||||
|
acl.count() > 0
|
||||||
|
}
|
||||||
|
Err(_) => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -113,4 +133,20 @@ mod tests {
|
||||||
test_value
|
test_value
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_file_has_acl() {
|
||||||
|
let temp_dir = tempdir().unwrap();
|
||||||
|
let file_path = temp_dir.path().join("test_file.txt");
|
||||||
|
|
||||||
|
File::create(&file_path).unwrap();
|
||||||
|
|
||||||
|
assert!(!has_acl(&file_path));
|
||||||
|
|
||||||
|
let test_attr = "user.test_acl";
|
||||||
|
let test_value = b"test value";
|
||||||
|
xattr::set(&file_path, test_attr, test_value).unwrap();
|
||||||
|
|
||||||
|
assert!(has_acl(&file_path));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue