diff options
Diffstat (limited to 'fs/xfs/xfs_acl.h')
-rw-r--r-- | fs/xfs/xfs_acl.h | 95 |
1 files changed, 29 insertions, 66 deletions
diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h index 642f1db4def4..947b150df8ed 100644 --- a/fs/xfs/xfs_acl.h +++ b/fs/xfs/xfs_acl.h | |||
@@ -18,81 +18,44 @@ | |||
18 | #ifndef __XFS_ACL_H__ | 18 | #ifndef __XFS_ACL_H__ |
19 | #define __XFS_ACL_H__ | 19 | #define __XFS_ACL_H__ |
20 | 20 | ||
21 | /* | 21 | struct inode; |
22 | * Access Control Lists | 22 | struct posix_acl; |
23 | */ | 23 | struct xfs_inode; |
24 | typedef __uint16_t xfs_acl_perm_t; | ||
25 | typedef __int32_t xfs_acl_tag_t; | ||
26 | typedef __int32_t xfs_acl_id_t; | ||
27 | 24 | ||
28 | #define XFS_ACL_MAX_ENTRIES 25 | 25 | #define XFS_ACL_MAX_ENTRIES 25 |
29 | #define XFS_ACL_NOT_PRESENT (-1) | 26 | #define XFS_ACL_NOT_PRESENT (-1) |
30 | 27 | ||
31 | typedef struct xfs_acl_entry { | 28 | /* On-disk XFS access control list structure */ |
32 | xfs_acl_tag_t ae_tag; | 29 | struct xfs_acl { |
33 | xfs_acl_id_t ae_id; | 30 | __be32 acl_cnt; |
34 | xfs_acl_perm_t ae_perm; | 31 | struct xfs_acl_entry { |
35 | } xfs_acl_entry_t; | 32 | __be32 ae_tag; |
36 | 33 | __be32 ae_id; | |
37 | typedef struct xfs_acl { | 34 | __be16 ae_perm; |
38 | __int32_t acl_cnt; | 35 | } acl_entry[XFS_ACL_MAX_ENTRIES]; |
39 | xfs_acl_entry_t acl_entry[XFS_ACL_MAX_ENTRIES]; | 36 | }; |
40 | } xfs_acl_t; | ||
41 | 37 | ||
42 | /* On-disk XFS extended attribute names */ | 38 | /* On-disk XFS extended attribute names */ |
43 | #define SGI_ACL_FILE "SGI_ACL_FILE" | 39 | #define SGI_ACL_FILE "SGI_ACL_FILE" |
44 | #define SGI_ACL_DEFAULT "SGI_ACL_DEFAULT" | 40 | #define SGI_ACL_DEFAULT "SGI_ACL_DEFAULT" |
45 | #define SGI_ACL_FILE_SIZE (sizeof(SGI_ACL_FILE)-1) | 41 | #define SGI_ACL_FILE_SIZE (sizeof(SGI_ACL_FILE)-1) |
46 | #define SGI_ACL_DEFAULT_SIZE (sizeof(SGI_ACL_DEFAULT)-1) | 42 | #define SGI_ACL_DEFAULT_SIZE (sizeof(SGI_ACL_DEFAULT)-1) |
47 | 43 | ||
48 | #define _ACL_TYPE_ACCESS 1 | ||
49 | #define _ACL_TYPE_DEFAULT 2 | ||
50 | |||
51 | #ifdef CONFIG_XFS_POSIX_ACL | 44 | #ifdef CONFIG_XFS_POSIX_ACL |
52 | 45 | extern int xfs_check_acl(struct inode *inode, int mask); | |
53 | struct vattr; | 46 | extern struct posix_acl *xfs_get_acl(struct inode *inode, int type); |
54 | struct xfs_inode; | 47 | extern int xfs_inherit_acl(struct inode *inode, struct posix_acl *default_acl); |
55 | 48 | extern int xfs_acl_chmod(struct inode *inode); | |
56 | extern struct kmem_zone *xfs_acl_zone; | 49 | extern int posix_acl_access_exists(struct inode *inode); |
57 | #define xfs_acl_zone_init(zone, name) \ | 50 | extern int posix_acl_default_exists(struct inode *inode); |
58 | (zone) = kmem_zone_init(sizeof(xfs_acl_t), (name)) | 51 | |
59 | #define xfs_acl_zone_destroy(zone) kmem_zone_destroy(zone) | 52 | extern struct xattr_handler xfs_xattr_system_handler; |
60 | |||
61 | extern int xfs_acl_inherit(struct inode *, mode_t mode, xfs_acl_t *); | ||
62 | extern int xfs_acl_iaccess(struct xfs_inode *, mode_t, cred_t *); | ||
63 | extern int xfs_acl_vtoacl(struct inode *, xfs_acl_t *, xfs_acl_t *); | ||
64 | extern int xfs_acl_vhasacl_access(struct inode *); | ||
65 | extern int xfs_acl_vhasacl_default(struct inode *); | ||
66 | extern int xfs_acl_vset(struct inode *, void *, size_t, int); | ||
67 | extern int xfs_acl_vget(struct inode *, void *, size_t, int); | ||
68 | extern int xfs_acl_vremove(struct inode *, int); | ||
69 | |||
70 | #define _ACL_PERM_INVALID(perm) ((perm) & ~(ACL_READ|ACL_WRITE|ACL_EXECUTE)) | ||
71 | |||
72 | #define _ACL_INHERIT(c,m,d) (xfs_acl_inherit(c,m,d)) | ||
73 | #define _ACL_GET_ACCESS(pv,pa) (xfs_acl_vtoacl(pv,pa,NULL) == 0) | ||
74 | #define _ACL_GET_DEFAULT(pv,pd) (xfs_acl_vtoacl(pv,NULL,pd) == 0) | ||
75 | #define _ACL_ACCESS_EXISTS xfs_acl_vhasacl_access | ||
76 | #define _ACL_DEFAULT_EXISTS xfs_acl_vhasacl_default | ||
77 | |||
78 | #define _ACL_ALLOC(a) ((a) = kmem_zone_alloc(xfs_acl_zone, KM_SLEEP)) | ||
79 | #define _ACL_FREE(a) ((a)? kmem_zone_free(xfs_acl_zone, (a)):(void)0) | ||
80 | |||
81 | #else | 53 | #else |
82 | #define xfs_acl_zone_init(zone,name) | 54 | # define xfs_check_acl NULL |
83 | #define xfs_acl_zone_destroy(zone) | 55 | # define xfs_get_acl(inode, type) NULL |
84 | #define xfs_acl_vset(v,p,sz,t) (-EOPNOTSUPP) | 56 | # define xfs_inherit_acl(inode, default_acl) 0 |
85 | #define xfs_acl_vget(v,p,sz,t) (-EOPNOTSUPP) | 57 | # define xfs_acl_chmod(inode) 0 |
86 | #define xfs_acl_vremove(v,t) (-EOPNOTSUPP) | 58 | # define posix_acl_access_exists(inode) 0 |
87 | #define xfs_acl_vhasacl_access(v) (0) | 59 | # define posix_acl_default_exists(inode) 0 |
88 | #define xfs_acl_vhasacl_default(v) (0) | 60 | #endif /* CONFIG_XFS_POSIX_ACL */ |
89 | #define _ACL_ALLOC(a) (1) /* successfully allocate nothing */ | ||
90 | #define _ACL_FREE(a) ((void)0) | ||
91 | #define _ACL_INHERIT(c,m,d) (0) | ||
92 | #define _ACL_GET_ACCESS(pv,pa) (0) | ||
93 | #define _ACL_GET_DEFAULT(pv,pd) (0) | ||
94 | #define _ACL_ACCESS_EXISTS (NULL) | ||
95 | #define _ACL_DEFAULT_EXISTS (NULL) | ||
96 | #endif | ||
97 | |||
98 | #endif /* __XFS_ACL_H__ */ | 61 | #endif /* __XFS_ACL_H__ */ |