Compare commits

..

No commits in common. "main" and "0.1.3" have entirely different histories.
main ... 0.1.3

3 changed files with 12 additions and 42 deletions

2
Cargo.lock generated
View File

@ -31,7 +31,7 @@ checksum = "a5f43f184355eefb8d17fc948dbecf6c13be3c141f20d834ae842193a448c72a"
[[package]]
name = "posix-acl"
version = "0.1.5"
version = "0.1.3"
dependencies = [
"acl-sys",
"anyhow",

View File

@ -1,6 +1,6 @@
[package]
name = "posix-acl"
version = "0.1.6"
version = "0.1.3"
edition = "2021"
[dependencies]

View File

@ -123,6 +123,8 @@ impl PosixACL {
return Err(anyhow!("Failed to get ACL entry"));
}
println!("entry: {:?}", entry);
let mut tag_type: i32 = 0;
check_return(
unsafe { acl_get_tag_type(entry, &mut tag_type) },
@ -165,6 +167,7 @@ impl PosixACL {
"acl_get_permset",
);
println!("permset: {:?}", permset);
let perm = if permset.is_null() {
0
} else {
@ -176,46 +179,6 @@ impl PosixACL {
entries.push(ACLEntry(qual, permset));
}
// There should be at leas a UserObj, GroupObj, Other and Mask on the non default ACL entries. If they dont exist, create them
if !default {
let mut found_user = false;
let mut found_group = false;
let mut found_other = false;
let mut found_mask: Option<PermSet> = None;
for ent in entries.iter() {
match ent.0 {
Qualifier::UserObj => {
found_user = true;
}
Qualifier::GroupObj => {
found_group = true;
}
Qualifier::Other => {
found_other = true;
}
Qualifier::Mask => found_mask = Some(ent.1),
_ => {}
}
}
let def_perm = found_mask.unwrap_or(ACL_RWX);
if !found_user {
entries.push(ACLEntry(Qualifier::UserObj, def_perm.clone()));
}
if !found_group {
entries.push(ACLEntry(Qualifier::GroupObj, def_perm.clone()));
}
if !found_other {
entries.push(ACLEntry(Qualifier::Other, def_perm.clone()));
}
if found_mask.is_none() {
entries.push(ACLEntry(Qualifier::Mask, def_perm.clone()));
}
}
Ok(PosixACL { entries })
}
@ -282,6 +245,11 @@ impl PosixACL {
return Err(anyhow!("Other entry is required"));
}
let has_mask = self.entries.iter().any(|x| matches!(x.0, Qualifier::Mask));
if !has_mask {
return Err(anyhow!("Mask entry is required"));
}
for acl_entry in &self.entries {
let mut entry = null_mut();
check_return(
@ -342,6 +310,7 @@ impl<T> Drop for AclPtr<T> {
}
pub(crate) fn check_return(ret: i32, func: &str) {
println!("ret: {} fnc: {}", ret, func);
assert_eq!(
ret,
0,
@ -376,6 +345,7 @@ mod test {
let mut acl_r = PosixACL::new_from_file(path, false).unwrap();
acl_r.entries.sort();
println!("{:?}", acl);
assert_eq!(acl.entries.len(), acl_r.entries.len());
let missing = acl
.entries