524ec4a67a03301c75fc84b723a7c18a9ea2a72d
[wimlib] / include / wimlib / security_descriptor.h
1 /*
2  * security_descriptor.h
3  *
4  * The author dedicates this file to the public domain.
5  * You can do whatever you want with this file.
6  */
7
8 #ifndef _WIMLIB_SECURITY_DESCRIPTOR_H
9 #define _WIMLIB_SECURITY_DESCRIPTOR_H
10
11 #include "wimlib/compiler.h"
12 #include "wimlib/types.h"
13
14 /* Note: the data types in this header are prefixed with wimlib_ to avoid
15  * conflicts with the same types being defined in the libntfs-3g headers.  */
16
17 /* Windows NT security descriptor, in self-relative format  */
18 typedef struct {
19         /* Security descriptor revision; should be 1  */
20         u8 revision;
21
22         /* Padding  */
23         u8 sbz1;
24
25         /* Bitwise OR of flags defined below, such as SE_DACL_PRESENT  */
26         le16 control;
27
28         /* Offset of owenr SID structure in the security descriptor  */
29         le32 owner_offset;
30
31         /* Offset of group SID structure in the security descriptor  */
32         le32 group_offset;
33
34         /* Offset of System Access Control List (SACL) in security descriptor,
35          * or 0 if no SACL is present  */
36         le32 sacl_offset;
37
38         /* Offset of Discretionary Access Control List (DACL) in security
39          * descriptor, or 0 if no DACL is present  */
40         le32 dacl_offset;
41 } _packed_attribute wimlib_SECURITY_DESCRIPTOR_RELATIVE;
42
43 #define wimlib_SE_OWNER_DEFAULTED               0x0001
44 #define wimlib_SE_GROUP_DEFAULTED               0x0002
45 #define wimlib_SE_DACL_PRESENT                  0x0004
46 #define wimlib_SE_DACL_DEFAULTED                0x0008
47 #define wimlib_SE_SACL_PRESENT                  0x0010
48 #define wimlib_SE_SACL_DEFAULTED                0x0020
49 #define wimlib_SE_DACL_AUTO_INHERIT_REQ         0x0100
50 #define wimlib_SE_SACL_AUTO_INHERIT_REQ         0x0200
51 #define wimlib_SE_DACL_AUTO_INHERITED           0x0400
52 #define wimlib_SE_SACL_AUTO_INHERITED           0x0800
53 #define wimlib_SE_DACL_PROTECTED                0x1000
54 #define wimlib_SE_SACL_PROTECTED                0x2000
55 #define wimlib_SE_RM_CONTROL_VALID              0x4000
56 #define wimlib_SE_SELF_RELATIVE                 0x8000
57
58 /* Header of a Windows NT access control entry  */
59 typedef struct {
60         /* Type of ACE  */
61         u8 type;
62
63         /* Bitwise OR of inherit ACE flags  */
64         u8 flags;
65
66         /* Size of the access control entry, including this header  */
67         le16 size;
68 } _packed_attribute wimlib_ACE_HEADER;
69
70 /* Windows NT access control entry to grant rights to a user or group  */
71 typedef struct {
72         wimlib_ACE_HEADER hdr;
73         le32 mask;
74         le32 sid_start;
75 } _packed_attribute wimlib_ACCESS_ALLOWED_ACE;
76
77 /* Windows NT access control entry to deny rights to a user or group  */
78 typedef struct {
79         wimlib_ACE_HEADER hdr;
80         le32 mask;
81         le32 sid_start;
82 } _packed_attribute wimlib_ACCESS_DENIED_ACE;
83
84 /* Windows NT access control entry to audit access to the object  */
85 typedef struct {
86         wimlib_ACE_HEADER hdr;
87         le32 mask;
88         le32 sid_start;
89 } _packed_attribute wimlib_SYSTEM_AUDIT_ACE;
90
91
92 /* Header of a Windows NT access control list  */
93 typedef struct {
94         /* ACL_REVISION or ACL_REVISION_DS */
95         u8 revision;
96
97         /* padding  */
98         u8 sbz1;
99
100         /* Total size of the ACL, including all access control entries  */
101         le16 acl_size;
102
103         /* Number of access control entry structures that follow the ACL
104          * structure  */
105         le16 ace_count;
106
107         /* padding  */
108         le16 sbz2;
109 } _packed_attribute wimlib_ACL;
110
111 /* Windows NT security identifier (user or group)  */
112 typedef struct {
113
114         u8  revision;
115         u8  sub_authority_count;
116
117         /* Identifies the authority that issued the SID  */
118         u8  identifier_authority[6];
119
120         le32 sub_authority[];
121 } _packed_attribute wimlib_SID;
122
123 #endif