]>
git.proxmox.com Git - pxar.git/blob - src/format/acl.rs
3 use std
::cmp
::Ordering
;
5 use endian_trait
::Endian
;
7 pub const READ
: u64 = 4;
8 pub const WRITE
: u64 = 2;
9 pub const EXECUTE
: u64 = 1;
10 pub const NO_MASK
: u64 = u64::MAX
;
12 /// ACL permission bits.
14 /// While this is normally just a bitfield, the `NO_MASK` special value makes this a value of 2
15 /// possible "types", so we don't use `bitflags!` for this.
16 #[derive(Clone, Copy, Debug, Endian, Eq, Ord, PartialEq, PartialOrd)]
17 pub struct Permissions(pub u64);
20 pub const NO_MASK
: Permissions
= Permissions(NO_MASK
);
23 #[derive(Clone, Debug, Endian, Eq, PartialEq)]
27 pub permissions
: Permissions
,
28 //pub name: Vec<u64>, not impl for now
32 pub fn new(uid
: u64, permissions
: u64) -> Self {
35 permissions
: Permissions(permissions
),
40 // TODO if also name is impl, sort by uid, then by name and last by permissions
42 fn cmp(&self, other
: &User
) -> Ordering
{
43 match self.uid
.cmp(&other
.uid
) {
44 // uids are equal, entries ordered by permissions
45 Ordering
::Equal
=> self.permissions
.cmp(&other
.permissions
),
46 // uids are different, entries ordered by uid
47 uid_order
=> uid_order
,
52 impl PartialOrd
for User
{
53 fn partial_cmp(&self, other
: &User
) -> Option
<Ordering
> {
58 #[derive(Clone, Debug, Endian, Eq, PartialEq)]
62 pub permissions
: Permissions
,
63 //pub name: Vec<u64>, not impl for now
67 pub fn new(gid
: u64, permissions
: u64) -> Self {
70 permissions
: Permissions(permissions
),
75 // TODO if also name is impl, sort by gid, then by name and last by permissions
77 fn cmp(&self, other
: &Group
) -> Ordering
{
78 match self.gid
.cmp(&other
.gid
) {
79 // gids are equal, entries are ordered by permissions
80 Ordering
::Equal
=> self.permissions
.cmp(&other
.permissions
),
81 // gids are different, entries ordered by gid
82 gid_ordering
=> gid_ordering
,
87 impl PartialOrd
for Group
{
88 fn partial_cmp(&self, other
: &Group
) -> Option
<Ordering
> {
93 #[derive(Clone, Debug, Endian, Eq, PartialEq)]
95 pub struct GroupObject
{
96 pub permissions
: Permissions
,
99 #[derive(Clone, Debug, Endian, PartialEq)]
100 #[cfg_attr(feature = "test-harness", derive(Eq))]
103 pub user_obj_permissions
: Permissions
,
104 pub group_obj_permissions
: Permissions
,
105 pub other_permissions
: Permissions
,
106 pub mask_permissions
: Permissions
,