]> arthur.barton.de Git - netatalk.git/blob - etc/afpd/acl_mappings.h
Merge remote-tracking branch 'origin/branch-netatalk-3-0' into develop
[netatalk.git] / etc / afpd / acl_mappings.h
1 /*
2    Copyright (c) 2008,2009 Frank Lahm <franklahm@gmail.com>
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2 of the License, or
7    (at your option) any later version.
8  
9    This program is distributed in the hope that it will 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.
13  */
14
15 #ifndef ACL_MAPPINGS
16 #define ACL_MAPPINGS
17
18 #ifdef HAVE_SOLARIS_ACLS
19 #include <sys/acl.h>
20 #endif
21 #ifdef HAVE_FREEBSD_SUNACL
22 #include <sunacl.h>
23 #endif
24
25 #include "acls.h"
26
27 /* 
28  * Stuff for mapping between ACL implementations
29  */
30
31 /* Solaris 10u8 still hasn't got ACE_INHERITED_ACE */
32 #ifndef ACE_INHERITED_ACE
33 #define ACE_INHERITED_ACE 0x0080
34 #endif
35
36 struct ace_rights_map {
37     uint32_t from;
38     uint32_t to;
39 };
40
41 #if (defined HAVE_SOLARIS_ACLS || defined HAVE_FREEBSD_SUNACL)
42 struct ace_rights_map nfsv4_to_darwin_rights[] = {
43     {ACE_READ_DATA,         DARWIN_ACE_READ_DATA},
44     {ACE_WRITE_DATA,        DARWIN_ACE_WRITE_DATA},
45     {ACE_APPEND_DATA,       DARWIN_ACE_APPEND_DATA},
46     {ACE_READ_NAMED_ATTRS,  DARWIN_ACE_READ_EXTATTRIBUTES},
47     {ACE_WRITE_NAMED_ATTRS, DARWIN_ACE_WRITE_EXTATTRIBUTES},
48     {ACE_EXECUTE,           DARWIN_ACE_EXECUTE},
49     {ACE_DELETE_CHILD,      DARWIN_ACE_DELETE_CHILD},
50     {ACE_READ_ATTRIBUTES,   DARWIN_ACE_READ_ATTRIBUTES},
51     {ACE_WRITE_ATTRIBUTES,  DARWIN_ACE_WRITE_ATTRIBUTES},
52     {ACE_DELETE,            DARWIN_ACE_DELETE},
53     {ACE_READ_ACL,          DARWIN_ACE_READ_SECURITY},
54     {ACE_WRITE_ACL,         DARWIN_ACE_WRITE_SECURITY},
55     {ACE_WRITE_OWNER,       DARWIN_ACE_TAKE_OWNERSHIP},
56     {0,0}
57 };
58
59 struct ace_rights_map darwin_to_nfsv4_rights[] = {
60     {DARWIN_ACE_READ_DATA,           ACE_READ_DATA},
61     {DARWIN_ACE_WRITE_DATA,          ACE_WRITE_DATA},
62     {DARWIN_ACE_APPEND_DATA,         ACE_APPEND_DATA},
63     {DARWIN_ACE_READ_EXTATTRIBUTES,  ACE_READ_NAMED_ATTRS},
64     {DARWIN_ACE_WRITE_EXTATTRIBUTES, ACE_WRITE_NAMED_ATTRS},
65     {DARWIN_ACE_EXECUTE,             ACE_EXECUTE},
66     {DARWIN_ACE_DELETE_CHILD,        ACE_DELETE_CHILD},
67     {DARWIN_ACE_READ_ATTRIBUTES,     ACE_READ_ATTRIBUTES},
68     {DARWIN_ACE_WRITE_ATTRIBUTES,    ACE_WRITE_ATTRIBUTES},
69     {DARWIN_ACE_DELETE,              ACE_DELETE},
70     {DARWIN_ACE_READ_SECURITY,       ACE_READ_ACL},
71     {DARWIN_ACE_WRITE_SECURITY,      ACE_WRITE_ACL},
72     {DARWIN_ACE_TAKE_OWNERSHIP,      ACE_WRITE_OWNER},
73     {0,0}
74 };
75
76 struct nfsv4_to_darwin_flags_map {
77     uint16_t from;
78     uint32_t to;
79 };
80
81 struct nfsv4_to_darwin_flags_map nfsv4_to_darwin_flags[] = {
82     {ACE_FILE_INHERIT_ACE,         DARWIN_ACE_FLAGS_FILE_INHERIT},
83     {ACE_DIRECTORY_INHERIT_ACE,    DARWIN_ACE_FLAGS_DIRECTORY_INHERIT},
84     {ACE_NO_PROPAGATE_INHERIT_ACE, DARWIN_ACE_FLAGS_LIMIT_INHERIT},
85     {ACE_INHERIT_ONLY_ACE,         DARWIN_ACE_FLAGS_ONLY_INHERIT},
86     {ACE_INHERITED_ACE,            DARWIN_ACE_FLAGS_INHERITED},
87     {0,0}
88 };
89
90 struct darwin_to_nfsv4_flags_map {
91     uint32_t from;
92     uint16_t to;
93 };
94
95 struct darwin_to_nfsv4_flags_map darwin_to_nfsv4_flags[] = {
96     {DARWIN_ACE_FLAGS_FILE_INHERIT,      ACE_FILE_INHERIT_ACE},
97     {DARWIN_ACE_FLAGS_DIRECTORY_INHERIT, ACE_DIRECTORY_INHERIT_ACE},
98     {DARWIN_ACE_FLAGS_LIMIT_INHERIT,     ACE_NO_PROPAGATE_INHERIT_ACE},
99     {DARWIN_ACE_FLAGS_ONLY_INHERIT,      ACE_INHERIT_ONLY_ACE},
100     {DARWIN_ACE_FLAGS_INHERITED,         ACE_INHERITED_ACE},
101     {0,0}
102 };
103 #endif /* HAVE_SOLARIS_ACLS || HAVE_FREEBSD_SUNACL */
104
105 #endif  /* ACL_MAPPINGS */