1 #ifndef __LUNAIX_FS_ACL_H
2 #define __LUNAIX_FS_ACL_H
4 #include <lunaix/usrscope.h>
11 #define FSACL_RWXMASK 0777
12 #define FSACL_U(x) (((x) & 0b111) << 6)
13 #define FSACL_G(x) (((x) & 0b111) << 3)
14 #define FSACL_O(x) ((x) & 0b111)
16 #define FSACL_uR FSACL_U(FSACL_READ)
17 #define FSACL_uW FSACL_U(FSACL_WRITE)
18 #define FSACL_uX FSACL_U(FSACL_EXEC)
20 #define FSACL_gR FSACL_G(FSACL_READ)
21 #define FSACL_gW FSACL_G(FSACL_WRITE)
22 #define FSACL_gX FSACL_G(FSACL_EXEC)
24 #define FSACL_oR FSACL_O(FSACL_READ)
25 #define FSACL_oW FSACL_O(FSACL_WRITE)
26 #define FSACL_oX FSACL_O(FSACL_EXEC)
28 #define FSACL_suid 04000
29 #define FSACL_sgid 02000
30 #define FSACL_svtx 01000
32 // permitted read (any usr or group matched)
33 #define FSACL_RD (FSACL_uRD | FSACL_gRD)
34 // permitted write (any usr or group matched)
35 #define FSACL_WR (FSACL_uWR | FSACL_gWR)
36 // permitted execute (any usr or group matched)
37 #define FSACL_X (FSACL_uX | FSACL_gX)
44 #define FSACL_aR (FSACL_uR | FSACL_gR | FSACL_oR)
46 #define FSACL_aW (FSACL_uW | FSACL_gW | FSACL_oW)
48 #define FSACL_aX (FSACL_uX | FSACL_gX | FSACL_oX)
50 #define __fsacl_sel(scope, type) (FSACL_##scope##type)
51 #define FSACL_u(r, w, x) \
52 (v__(__fsacl_sel(u, r)) | v__(__fsacl_sel(u, w)) | v__(__fsacl_sel(u, x)))
54 #define FSACL_g(r, w, x) \
55 (v__(__fsacl_sel(g, r)) | v__(__fsacl_sel(g, w)) | v__(__fsacl_sel(g, x)))
57 #define FSACL_o(r, w, x) \
58 (v__(__fsacl_sel(o, r)) | v__(__fsacl_sel(o, w)) | v__(__fsacl_sel(o, x)))
60 #define fsacl_test(acl, type) ((acl) & (FSACL_##type))
62 static inline bool must_inline
63 fsacl_allow_ops(unsigned int ops, unsigned int acl, uid_t uid, gid_t gid)
65 return !!(acl & ops & check_current_acl(uid, gid));
68 #endif /* __LUNAIX_FS_ACL_H */