Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
7b718769 NS |
2 | * Copyright (c) 2001-2005 Silicon Graphics, Inc. |
3 | * All Rights Reserved. | |
1da177e4 | 4 | * |
7b718769 NS |
5 | * This program is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU General Public License as | |
1da177e4 LT |
7 | * published by the Free Software Foundation. |
8 | * | |
7b718769 NS |
9 | * This program is distributed in the hope that it would be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 | * GNU General Public License for more details. | |
1da177e4 | 13 | * |
7b718769 NS |
14 | * You should have received a copy of the GNU General Public License |
15 | * along with this program; if not, write the Free Software Foundation, | |
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
1da177e4 LT |
17 | */ |
18 | #ifndef __XFS_ACL_H__ | |
19 | #define __XFS_ACL_H__ | |
20 | ||
21 | /* | |
22 | * Access Control Lists | |
23 | */ | |
24 | typedef __uint16_t xfs_acl_perm_t; | |
25 | typedef __int32_t xfs_acl_type_t; | |
26 | typedef __int32_t xfs_acl_tag_t; | |
27 | typedef __int32_t xfs_acl_id_t; | |
28 | ||
29 | #define XFS_ACL_MAX_ENTRIES 25 | |
30 | #define XFS_ACL_NOT_PRESENT (-1) | |
31 | ||
32 | typedef struct xfs_acl_entry { | |
33 | xfs_acl_tag_t ae_tag; | |
34 | xfs_acl_id_t ae_id; | |
35 | xfs_acl_perm_t ae_perm; | |
36 | } xfs_acl_entry_t; | |
37 | ||
38 | typedef struct xfs_acl { | |
39 | __int32_t acl_cnt; | |
40 | xfs_acl_entry_t acl_entry[XFS_ACL_MAX_ENTRIES]; | |
41 | } xfs_acl_t; | |
42 | ||
43 | /* On-disk XFS extended attribute names */ | |
44 | #define SGI_ACL_FILE "SGI_ACL_FILE" | |
45 | #define SGI_ACL_DEFAULT "SGI_ACL_DEFAULT" | |
46 | #define SGI_ACL_FILE_SIZE (sizeof(SGI_ACL_FILE)-1) | |
47 | #define SGI_ACL_DEFAULT_SIZE (sizeof(SGI_ACL_DEFAULT)-1) | |
48 | ||
136f8f21 TS |
49 | #define _ACL_TYPE_ACCESS 1 |
50 | #define _ACL_TYPE_DEFAULT 2 | |
1da177e4 LT |
51 | |
52 | #ifdef CONFIG_XFS_POSIX_ACL | |
53 | ||
54 | struct vattr; | |
1da177e4 LT |
55 | struct xfs_inode; |
56 | ||
57 | extern struct kmem_zone *xfs_acl_zone; | |
58 | #define xfs_acl_zone_init(zone, name) \ | |
3758dee9 NS |
59 | (zone) = kmem_zone_init(sizeof(xfs_acl_t), (name)) |
60 | #define xfs_acl_zone_destroy(zone) kmem_zone_destroy(zone) | |
1da177e4 | 61 | |
5ec7f8c7 | 62 | extern int xfs_acl_inherit(struct inode *, mode_t mode, xfs_acl_t *); |
1da177e4 | 63 | extern int xfs_acl_iaccess(struct xfs_inode *, mode_t, cred_t *); |
5ec7f8c7 CH |
64 | extern int xfs_acl_vtoacl(struct inode *, xfs_acl_t *, xfs_acl_t *); |
65 | extern int xfs_acl_vhasacl_access(struct inode *); | |
66 | extern int xfs_acl_vhasacl_default(struct inode *); | |
67 | extern int xfs_acl_vset(struct inode *, void *, size_t, int); | |
68 | extern int xfs_acl_vget(struct inode *, void *, size_t, int); | |
69 | extern int xfs_acl_vremove(struct inode *, int); | |
1da177e4 | 70 | |
1da177e4 LT |
71 | #define _ACL_PERM_INVALID(perm) ((perm) & ~(ACL_READ|ACL_WRITE|ACL_EXECUTE)) |
72 | ||
3e5daf05 | 73 | #define _ACL_INHERIT(c,m,d) (xfs_acl_inherit(c,m,d)) |
1da177e4 LT |
74 | #define _ACL_GET_ACCESS(pv,pa) (xfs_acl_vtoacl(pv,pa,NULL) == 0) |
75 | #define _ACL_GET_DEFAULT(pv,pd) (xfs_acl_vtoacl(pv,NULL,pd) == 0) | |
76 | #define _ACL_ACCESS_EXISTS xfs_acl_vhasacl_access | |
77 | #define _ACL_DEFAULT_EXISTS xfs_acl_vhasacl_default | |
1da177e4 LT |
78 | |
79 | #define _ACL_ALLOC(a) ((a) = kmem_zone_alloc(xfs_acl_zone, KM_SLEEP)) | |
80 | #define _ACL_FREE(a) ((a)? kmem_zone_free(xfs_acl_zone, (a)):(void)0) | |
81 | ||
82 | #else | |
83 | #define xfs_acl_zone_init(zone,name) | |
84 | #define xfs_acl_zone_destroy(zone) | |
85 | #define xfs_acl_vset(v,p,sz,t) (-EOPNOTSUPP) | |
86 | #define xfs_acl_vget(v,p,sz,t) (-EOPNOTSUPP) | |
87 | #define xfs_acl_vremove(v,t) (-EOPNOTSUPP) | |
88 | #define xfs_acl_vhasacl_access(v) (0) | |
89 | #define xfs_acl_vhasacl_default(v) (0) | |
90 | #define _ACL_ALLOC(a) (1) /* successfully allocate nothing */ | |
91 | #define _ACL_FREE(a) ((void)0) | |
3e5daf05 | 92 | #define _ACL_INHERIT(c,m,d) (0) |
1da177e4 LT |
93 | #define _ACL_GET_ACCESS(pv,pa) (0) |
94 | #define _ACL_GET_DEFAULT(pv,pd) (0) | |
95 | #define _ACL_ACCESS_EXISTS (NULL) | |
96 | #define _ACL_DEFAULT_EXISTS (NULL) | |
1da177e4 LT |
97 | #endif |
98 | ||
99 | #endif /* __XFS_ACL_H__ */ |