Compare commits
No commits in common. "main" and "0.1.3" have entirely different histories.
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -31,7 +31,7 @@ checksum = "a5f43f184355eefb8d17fc948dbecf6c13be3c141f20d834ae842193a448c72a"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "posix-acl"
|
name = "posix-acl"
|
||||||
version = "0.1.5"
|
version = "0.1.3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"acl-sys",
|
"acl-sys",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "posix-acl"
|
name = "posix-acl"
|
||||||
version = "0.1.6"
|
version = "0.1.3"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
50
src/lib.rs
50
src/lib.rs
@ -123,6 +123,8 @@ impl PosixACL {
|
|||||||
return Err(anyhow!("Failed to get ACL entry"));
|
return Err(anyhow!("Failed to get ACL entry"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
println!("entry: {:?}", entry);
|
||||||
|
|
||||||
let mut tag_type: i32 = 0;
|
let mut tag_type: i32 = 0;
|
||||||
check_return(
|
check_return(
|
||||||
unsafe { acl_get_tag_type(entry, &mut tag_type) },
|
unsafe { acl_get_tag_type(entry, &mut tag_type) },
|
||||||
@ -165,6 +167,7 @@ impl PosixACL {
|
|||||||
"acl_get_permset",
|
"acl_get_permset",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
println!("permset: {:?}", permset);
|
||||||
let perm = if permset.is_null() {
|
let perm = if permset.is_null() {
|
||||||
0
|
0
|
||||||
} else {
|
} else {
|
||||||
@ -176,46 +179,6 @@ impl PosixACL {
|
|||||||
entries.push(ACLEntry(qual, permset));
|
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 })
|
Ok(PosixACL { entries })
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,6 +245,11 @@ impl PosixACL {
|
|||||||
return Err(anyhow!("Other entry is required"));
|
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 {
|
for acl_entry in &self.entries {
|
||||||
let mut entry = null_mut();
|
let mut entry = null_mut();
|
||||||
check_return(
|
check_return(
|
||||||
@ -342,6 +310,7 @@ impl<T> Drop for AclPtr<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn check_return(ret: i32, func: &str) {
|
pub(crate) fn check_return(ret: i32, func: &str) {
|
||||||
|
println!("ret: {} fnc: {}", ret, func);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ret,
|
ret,
|
||||||
0,
|
0,
|
||||||
@ -376,6 +345,7 @@ mod test {
|
|||||||
let mut acl_r = PosixACL::new_from_file(path, false).unwrap();
|
let mut acl_r = PosixACL::new_from_file(path, false).unwrap();
|
||||||
acl_r.entries.sort();
|
acl_r.entries.sort();
|
||||||
|
|
||||||
|
println!("{:?}", acl);
|
||||||
assert_eq!(acl.entries.len(), acl_r.entries.len());
|
assert_eq!(acl.entries.len(), acl_r.entries.len());
|
||||||
let missing = acl
|
let missing = acl
|
||||||
.entries
|
.entries
|
||||||
|
Loading…
x
Reference in New Issue
Block a user