diff --git a/Cargo.lock b/Cargo.lock index 153eeb8..c9a9fcd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,7 +31,7 @@ checksum = "a5f43f184355eefb8d17fc948dbecf6c13be3c141f20d834ae842193a448c72a" [[package]] name = "posix-acl" -version = "0.1.1" +version = "0.1.3" dependencies = [ "acl-sys", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 6b42154..b8050f1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "posix-acl" -version = "0.1.1" +version = "0.1.3" edition = "2021" [dependencies] diff --git a/src/lib.rs b/src/lib.rs index 003557b..32252cc 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -35,22 +35,22 @@ pub static ACL_NONE: PermSet = PermSet::empty(); #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] pub enum Qualifier { UserObj, - GroupObj, - Other, User(u32), + GroupObj, Group(u32), Mask, + Other, } impl Qualifier { pub fn get_tag(&self) -> i32 { match self { Qualifier::UserObj => ACL_USER_OBJ, - Qualifier::GroupObj => ACL_GROUP_OBJ, - Qualifier::Other => ACL_OTHER, Qualifier::User(_) => ACL_USER, + Qualifier::GroupObj => ACL_GROUP_OBJ, Qualifier::Group(_) => ACL_GROUP, Qualifier::Mask => ACL_MASK, + Qualifier::Other => ACL_OTHER, } } @@ -63,10 +63,16 @@ impl Qualifier { } } -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +#[derive(Debug, Clone, PartialEq, Eq, Ord)] pub struct ACLEntry(pub Qualifier, pub PermSet); -#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)] +impl PartialOrd for ACLEntry { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.0.cmp(&other.0)) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, PartialOrd)] pub struct PosixACL { pub entries: Vec, } @@ -201,6 +207,7 @@ impl PosixACL { pub fn write>(&self, path: P) -> Result<()> { // Write ACL to file self.write_type(path, ACL_TYPE_ACCESS)?; + // TODO: If necessary fix mask Ok(()) } @@ -333,8 +340,11 @@ mod test { file.write_all(b"Hello, world!").unwrap(); acl.write(path).unwrap(); + acl.entries.sort(); + + let mut acl_r = PosixACL::new_from_file(path, false).unwrap(); + acl_r.entries.sort(); - let acl_r = PosixACL::new_from_file(path, false).unwrap(); println!("{:?}", acl); assert_eq!(acl.entries.len(), acl_r.entries.len()); let missing = acl