X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cbc8fdbfe473e23e19690204418e19999a9522d1..0fd474df7001837bde53da0e42e83081827c9641:/lunaix-os/includes/lunaix/fs_acl.h diff --git a/lunaix-os/includes/lunaix/fs_acl.h b/lunaix-os/includes/lunaix/fs_acl.h new file mode 100644 index 0000000..43ab5e2 --- /dev/null +++ b/lunaix-os/includes/lunaix/fs_acl.h @@ -0,0 +1,76 @@ +#ifndef __LUNAIX_FS_ACL_H +#define __LUNAIX_FS_ACL_H + +#include +#include "compiler.h" + +#define FSACL_READ 4 +#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_uR FSACL_U(FSACL_READ) +#define FSACL_uW FSACL_U(FSACL_WRITE) +#define FSACL_uX FSACL_U(FSACL_EXEC) + +#define FSACL_gR FSACL_G(FSACL_READ) +#define FSACL_gW FSACL_G(FSACL_WRITE) +#define FSACL_gX FSACL_G(FSACL_EXEC) + +#define FSACL_oR FSACL_O(FSACL_READ) +#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_WR (FSACL_uWR | FSACL_gWR) +// permitted execute (any usr or group matched) +#define FSACL_X (FSACL_uX | FSACL_gX) + +#define FSACL_u_ 0 +#define FSACL_g_ 0 +#define FSACL_o_ 0 + +// any +#define FSACL_aR (FSACL_uR | FSACL_gR | FSACL_oR) +#define FSACL_aW (FSACL_uW | FSACL_gW | FSACL_oW) +#define FSACL_aX (FSACL_uX | FSACL_gX | FSACL_oX) + +// user/group +#define FSACL_ugR (FSACL_uR | FSACL_gR) +#define FSACL_ugW (FSACL_uW | FSACL_gW) +#define FSACL_ugX (FSACL_uX | FSACL_gX) + + +#define __fsacl_sel(scope, type) (FSACL_##scope##type) +#define FSACL_u(r, w, x) \ + (v__(__fsacl_sel(u, r)) | v__(__fsacl_sel(u, w)) | v__(__fsacl_sel(u, x))) + +#define FSACL_g(r, w, x) \ + (v__(__fsacl_sel(g, r)) | v__(__fsacl_sel(g, w)) | v__(__fsacl_sel(g, x))) + +#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) +{ + return !!(acl & ops & check_current_acl(uid, gid)); +} + +#endif /* __LUNAIX_FS_ACL_H */