release the dnode lock after EACCESS in path walk
[lunaix-os.git] / lunaix-os / includes / lunaix / fs_acl.h
index c05080bf19de799b38e071b693e1ba4898967afe..fde7225080f98650ad5f2aa1ea19c63aafa97485 100644 (file)
@@ -8,6 +8,8 @@
 #define FSACL_WRITE    2
 #define FSACL_EXEC     1
 
+#define FSACL_MASK     03777
+#define FSACL_RWXMASK  0777
 #define FSACL_U(x)    (((x) & 0b111) << 6)
 #define FSACL_G(x)    (((x) & 0b111) << 3)
 #define FSACL_O(x)    ((x) & 0b111)
 #define FSACL_oW      FSACL_O(FSACL_WRITE)
 #define FSACL_oX      FSACL_O(FSACL_EXEC)
 
+#define FSACL_suid    04000
+#define FSACL_sgid    02000
+#define FSACL_svtx    01000
+
 // permitted read (any usr or group matched)
 #define FSACL_RD      (FSACL_uRD | FSACL_gRD)
 // permitted write (any usr or group matched)
 #define FSACL_o(r, w, x)            \
         (v__(__fsacl_sel(o, r)) | v__(__fsacl_sel(o, w)) | v__(__fsacl_sel(o, x)))
 
+#define FSACL_DEFAULT               \
+        (FSACL_u(R, W, X) | FSACL_g(R, W, X) | FSACL_o(R, _, X))
+
+#define fsacl_test(acl, type)   ((acl) & (FSACL_##type))
+
 static inline bool must_inline
 fsacl_allow_ops(unsigned int ops, unsigned int acl, uid_t uid, gid_t gid)
 {