Commit | Line | Data |
---|---|---|
03019e41 | 1 | To use this patch, run these commands for a successful build: |
1fcc420a | 2 | |
03019e41 | 3 | patch -p1 <patches/adaptec_acl_mods.diff |
1fcc420a WD |
4 | ./prepare-source |
5 | ./configure --enable-acl-support | |
6 | make | |
7 | ||
af7ee4d8 | 8 | Philip Lowman wrote: |
25b3348d | 9 | > Attached is a small patch which allows the preservation of the delete, |
af7ee4d8 WD |
10 | > chmod, and chown bits which Adaptec has added to XFS on their SnapOS NAS |
11 | > units. This is nice for backing up files between different NAS units | |
12 | > and preserving all of the Samba ACLs. | |
13 | > | |
14 | > I'm not sure how useful this patch will be because I'm not sure if any | |
15 | > other NAS vendors have standardized on their extensions to POSIX ACLs to | |
16 | > support Samba in the same manner that Adaptec has. FWIW, though, this | |
17 | > will allow you to preserve acls when copying between different Adaptec | |
18 | > based NAS units running SnapOS. | |
19 | ||
25b3348d | 20 | I (Wayne) tweaked the patch to work with the latest source. |
af7ee4d8 | 21 | |
25b3348d | 22 | Todo: |
d3832800 | 23 | |
25b3348d WD |
24 | Fix a bug that could lose some bits when stripping some (supposedly) |
25 | superfluous ACL info. | |
26 | ||
cc3e685d WD |
27 | diff --git a/lib/sysacls.c b/lib/sysacls.c |
28 | --- a/lib/sysacls.c | |
29 | +++ b/lib/sysacls.c | |
52e09c4e | 30 | @@ -30,6 +30,18 @@ |
25b3348d WD |
31 | #endif |
32 | #define DEBUG(x,y) | |
4306c620 | 33 | |
af7ee4d8 WD |
34 | +/* These are custom ACL bits used by Adaptec's modifications |
35 | + * to XFS on their SnapOS units. */ | |
25b3348d WD |
36 | +#ifndef ACL_DELETE |
37 | +#define ACL_DELETE 8 | |
38 | +#endif | |
39 | +#ifndef ACL_CHMOD | |
40 | +#define ACL_CHMOD 16 | |
41 | +#endif | |
42 | +#ifndef ACL_CHOWN | |
43 | +#define ACL_CHOWN 32 | |
44 | +#endif | |
45 | + | |
46 | void SAFE_FREE(void *mem) | |
47 | { | |
48 | if (mem) | |
cc3e685d | 49 | @@ -99,6 +111,9 @@ int sys_acl_get_info(SMB_ACL_ENTRY_T entry, SMB_ACL_TAG_T *tag_type_p, uint32 *b |
52e09c4e WD |
50 | return -1; |
51 | ||
52 | *bits_p = (acl_get_perm(permset, ACL_READ) ? 4 : 0) | |
53 | + | (acl_get_perm(permset, ACL_CHOWN) ? 32 : 0) | |
54 | + | (acl_get_perm(permset, ACL_CHMOD) ? 16 : 0) | |
55 | + | (acl_get_perm(permset, ACL_DELETE) ? 8 : 0) | |
56 | | (acl_get_perm(permset, ACL_WRITE) ? 2 : 0) | |
57 | | (acl_get_perm(permset, ACL_EXECUTE) ? 1 : 0); | |
58 | ||
cc3e685d | 59 | @@ -143,6 +158,12 @@ int sys_acl_set_access_bits(SMB_ACL_ENTRY_T entry, uint32 bits) |
25b3348d WD |
60 | if ((rc = acl_get_permset(entry, &permset)) != 0) |
61 | return rc; | |
62 | acl_clear_perms(permset); | |
63 | + if (bits & 32) | |
64 | + acl_add_perm(permset, ACL_CHOWN); | |
65 | + if (bits & 16) | |
66 | + acl_add_perm(permset, ACL_CHMOD); | |
67 | + if (bits & 8) | |
68 | + acl_add_perm(permset, ACL_DELETE); | |
69 | if (bits & 4) | |
70 | acl_add_perm(permset, ACL_READ); | |
71 | if (bits & 2) | |
cc3e685d WD |
72 | diff --git a/lib/sysacls.h b/lib/sysacls.h |
73 | --- a/lib/sysacls.h | |
74 | +++ b/lib/sysacls.h | |
52e09c4e | 75 | @@ -58,8 +58,8 @@ |
25b3348d WD |
76 | #define SMB_ACL_TYPE_ACCESS ACL_TYPE_ACCESS |
77 | #define SMB_ACL_TYPE_DEFAULT ACL_TYPE_DEFAULT | |
78 | ||
79 | -#define SMB_ACL_VALID_NAME_BITS (4 | 2 | 1) | |
80 | -#define SMB_ACL_VALID_OBJ_BITS (4 | 2 | 1) | |
81 | +#define SMB_ACL_VALID_NAME_BITS (32 | 16 | 8 | 4 | 2 | 1) | |
82 | +#define SMB_ACL_VALID_OBJ_BITS (32 | 16 | 8 | 4 | 2 | 1) | |
83 | ||
84 | #define SMB_ACL_NEED_SORT | |
af7ee4d8 | 85 |