1use bitflags::bitflags;
2use crate::enums::constants::*;
3use nom7::number::complete::{*,{le_u16, le_u32, le_u8}};
4use nom7::bytes::streaming::take;
5use nom7::combinator::cond;
6use nom7::multi::count;
7use nom7::IResult;
8
9#[derive(Debug)]
17pub struct SecurityDescriptor {
18 pub revision: u8,
19 pub sbz1: u8,
20 pub control: u16,
21 pub offset_owner: u32,
22 pub offset_group: u32,
23 pub offset_sacl: u32,
24 pub offset_dacl: u32,
25}
26
27impl SecurityDescriptor {
28 pub fn parse(i: &[u8]) -> IResult<&[u8], SecurityDescriptor>
29 {
30 let (i, revision) = le_u8(i)?;
31 let (i, sbz1) = le_u8(i)?;
32 let (i, control) = le_u16(i)?;
33 let (i, offset_owner) = le_u32(i)?;
34 let (i, offset_group) = le_u32(i)?;
35 let (i, offset_sacl) = le_u32(i)?;
36 let (i, offset_dacl) = le_u32(i)?;
37
38 let nt = SecurityDescriptor {
39 revision: revision,
40 sbz1: sbz1,
41 control: control,
42 offset_owner: offset_owner,
43 offset_group: offset_group,
44 offset_sacl: offset_sacl,
45 offset_dacl: offset_dacl,
46 };
47 Ok((i, nt))
48 }
49}
50
51#[derive(Debug, Clone)]
54pub struct LdapSidIdentifiedAuthority {
55 pub value: Vec<u8>,
56}
57
58impl LdapSidIdentifiedAuthority {
59 pub fn parse(i: &[u8]) -> IResult<&[u8], LdapSidIdentifiedAuthority>
60 {
61 let (i, value) = take(6_usize)(i)?;
62
63 let sid_authority = LdapSidIdentifiedAuthority {
64 value: value.to_vec(),
65 };
66 Ok((i, sid_authority))
67 }
68}
69
70#[derive(Clone, Debug)]
73pub struct LdapSid {
74 pub revision: u8,
75 pub sub_authority_count: u8,
76 pub identifier_authority: LdapSidIdentifiedAuthority,
77 pub sub_authority: Vec<u32>,
78}
79
80impl LdapSid {
81 pub fn parse(i: &[u8]) -> IResult<&[u8], LdapSid>
82 {
83 let (i, revision) = le_u8(i)?;
84 let (i, sub_authority_count) = le_u8(i)?;
85 let (i, identifier_authority) = LdapSidIdentifiedAuthority::parse(i)?;
86 let (i, sub_authority) = count(le_u32, sub_authority_count as usize)(i)?;
87
88 let ldap_sid = LdapSid {
89 revision: revision,
90 sub_authority_count: sub_authority_count,
91 identifier_authority: identifier_authority,
92 sub_authority: sub_authority.to_vec(),
93 };
94 Ok((i, ldap_sid))
95 }
96}
97
98#[derive(Debug)]
101pub struct Acl {
102 pub acl_revision: u8,
103 pub sbz1: u8,
104 pub acl_size: u16,
105 pub ace_count: u16,
106 pub sbz2: u16,
107 pub data: Vec<Ace>,
109}
110
111impl Acl {
112 pub fn parse(i: &[u8]) -> IResult<&[u8], Acl>
113 {
114 let (i, acl_revision) = le_u8(i)?;
115 let (i, sbz1) = le_u8(i)?;
116 let (i, acl_size) = le_u16(i)?;
117 let (i, ace_count) = le_u16(i)?;
118 let (i, sbz2) = le_u16(i)?;
119 let (i, data) = count(Ace::parse, ace_count as usize)(i)?;
120
121 let acl = Acl {
122 acl_revision: acl_revision,
123 sbz1: sbz1,
124 acl_size: acl_size,
125 ace_count: ace_count,
126 sbz2: sbz2,
127 data: data,
128 };
129 Ok((i, acl))
130 }
131}
132
133#[derive(Debug)]
136pub struct Ace {
137 pub ace_type: u8,
138 pub ace_flags: u8,
139 pub ace_size: u16,
140 pub data: AceFormat,
141}
142
143impl Ace {
144 pub fn parse(i: &[u8]) -> IResult<&[u8], Ace>
145 {
146 let (i, ace_type) = le_u8(i)?;
147 let (i, ace_flags) = le_u8(i)?;
148 let (i, ace_size) = le_u16(i)?;
149 let (i, data) = take(ace_size as usize - 4)(i)?;
150 let (_j,ace_data_formatted) = AceFormat::parse(data, ace_type)?;
151
152 let ace = Ace {
153 ace_type: ace_type,
154 ace_flags: ace_flags,
155 ace_size: ace_size,
156 data: ace_data_formatted,
157 };
158 Ok((i, ace))
159 }
160}
161
162#[derive(Clone, Debug)]
164pub enum AceFormat {
165 AceAllowed(AccessAllowedAce),
166 AceObjectAllowed(AccessAllowedObjectAce),
167 Empty,
168}
169
170impl AceFormat {
171 pub fn parse(i: &[u8], ace_type: u8) -> IResult<&[u8], AceFormat>
172 {
173 if &ace_type == &ACCESS_ALLOWED_ACE_TYPE {
174 let data = AceFormat::AceAllowed(AccessAllowedAce::parse(i)?.1);
175 Ok((i, data))
176 }
177 else if &ace_type == &ACCESS_DENIED_ACE_TYPE {
178 let data = AceFormat::AceAllowed(AccessAllowedAce::parse(i)?.1);
179 Ok((i, data))
180 }
181 else if &ace_type == &ACCESS_ALLOWED_OBJECT_ACE_TYPE {
182 let data = AceFormat::AceObjectAllowed(AccessAllowedObjectAce::parse(i)?.1);
183 Ok((i, data))
184 }
185 else if &ace_type == &ACCESS_DENIED_OBJECT_ACE_TYPE {
186 let data = AceFormat::AceObjectAllowed(AccessAllowedObjectAce::parse(i)?.1);
187 Ok((i, data))
188 }
189 else {
190 panic!("Error during ACE data parsing to AceFormat!")
191 }
192 }
193
194 pub fn get_mask(value: AceFormat) -> Option<u32>
195 {
196 match value {
197 AceFormat::AceAllowed(ace) => Some(ace.mask),
198 AceFormat::AceObjectAllowed(ace) => Some(ace.mask),
199 AceFormat::Empty => None,
200 }
201 }
202
203 pub fn get_sid(value: AceFormat) -> Option<LdapSid>
204 {
205 match value {
206 AceFormat::AceAllowed(ace) => Some(ace.sid),
207 AceFormat::AceObjectAllowed(ace) => Some(ace.sid),
208 AceFormat::Empty => None,
209 }
210 }
211
212 pub fn get_flags(value: AceFormat) -> Option<ObjectAceFlags>
213 {
214 match value {
215 AceFormat::AceAllowed(_) => None,
216 AceFormat::AceObjectAllowed(ace) => Some(ace.flags),
217 AceFormat::Empty => None,
218 }
219 }
220
221 pub fn get_object_type(value: AceFormat) -> Option<u128>
222 {
223 match value {
224 AceFormat::AceAllowed(_) => None,
225 AceFormat::AceObjectAllowed(ace) => ace.object_type,
226 AceFormat::Empty => None,
227 }
228 }
229
230 pub fn get_inherited_object_type(value: AceFormat) -> Option<u128>
231 {
232 match value {
233 AceFormat::AceAllowed(_) => None,
234 AceFormat::AceObjectAllowed(ace) => ace.inherited_object_type,
235 AceFormat::Empty => None,
236 }
237 }
238}
239
240#[derive(Clone, Debug)]
243pub struct AccessAllowedAce {
244 pub mask: u32,
245 pub sid: LdapSid,
246}
247
248impl AccessAllowedAce {
249 pub fn parse(i: &[u8]) -> IResult<&[u8], AccessAllowedAce>
250 {
251 let (i, mask) = le_u32(i)?;
252 let (i, sid) = LdapSid::parse(i)?;
253
254 let access_allowed_ace = AccessAllowedAce {
255 mask: mask,
256 sid: sid,
257 };
258 Ok((i, access_allowed_ace))
259 }
260}
261
262#[derive(Clone, Debug)]
265pub struct AccessAllowedObjectAce {
266 pub mask: u32,
267 pub flags: ObjectAceFlags,
268 pub object_type: Option<u128>,
269 pub inherited_object_type: Option<u128>,
270 pub sid: LdapSid,
271}
272
273impl AccessAllowedObjectAce {
274 pub fn parse(i: &[u8]) -> IResult<&[u8], AccessAllowedObjectAce>
275 {
276 let (i, mask) = le_u32(i)?;
277 let (i, flags) = ObjectAceFlags::parse(i)?;
278 let (i, object_type) = cond(flags.contains(ObjectAceFlags::ACE_OBJECT_PRESENT),le_u128)(i)?;
279 let (i, inherited_object_type) = cond(flags.contains(ObjectAceFlags::ACE_INHERITED_OBJECT_PRESENT),le_u128)(i)?;
280 let (i, sid) = LdapSid::parse(i)?;
281
282 let access_allowed_object_ace = AccessAllowedObjectAce {
283 mask: mask,
284 flags: flags,
285 object_type: object_type,
286 inherited_object_type: inherited_object_type,
287 sid: sid,
288 };
289 Ok((i, access_allowed_object_ace))
290 }
291}
292
293bitflags! {
294 #[derive(Clone,Debug)]
296 pub struct ObjectAceFlags : u32 {
297 const ACE_OBJECT_PRESENT = 0x0001;
298 const ACE_INHERITED_OBJECT_PRESENT = 0x0002;
299 }
300}
301
302impl ObjectAceFlags {
303 pub fn parse(i: &[u8]) -> IResult<&[u8], ObjectAceFlags>
304 {
305 let (i, flags) = le_u32(i)?;
306 let object_ace_flags = ObjectAceFlags::from_bits(flags).unwrap();
307 Ok((i, object_ace_flags))
308 }
309}
310
311#[cfg(test)]
314mod tests {
315
316 use crate::enums::{SecurityDescriptor, Ace, Acl};
317
318 #[test]
319 #[rustfmt::skip]
320 pub fn test_security_descriptor() {
321
322 let original = vec![
323 1,
326 0,
328 4, 140,
330 120, 9, 0, 0,
332 0, 0, 0, 0,
334 0, 0, 0, 0,
336 20, 0, 0, 0
338 ];
339
340 let nt = SecurityDescriptor::parse(&original).unwrap().1;
341 assert_eq!(nt.revision, 1);
342 assert_eq!(nt.sbz1, 0);
343 assert_eq!(nt.control, 35844);
344 assert_eq!(nt.offset_owner, 2424);
345 assert_eq!(nt.offset_group, 0);
346 assert_eq!(nt.offset_sacl, 0);
347 assert_eq!(nt.offset_dacl, 20);
348
349 println!("[NT SecurityDescriptor]: {:?}",&nt)
350 }
351
352 #[test]
353 #[rustfmt::skip]
354 pub fn test_ace() {
355
356 let original_ace = vec![
357 0x00,
359 0x12,
361 0x18, 0x00,
363 0xbd, 0x01, 0x0f, 0x00,
366 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00
368 ];
369
370 let result = Ace::parse(&original_ace).unwrap().1;
371 assert_eq!(result.ace_type, 0);
372 println!("ACE_ALLOWED: {:?}",result);
373
374
375 let original_ace_object = vec![
376 0x05,
378 0x12,
380 0x2c, 0x00,
382 0x94, 0x00, 0x02, 0x00,
385 0x02, 0x00, 0x00, 0x00,
388 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2,
390 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00
392 ];
393
394 let result = Ace::parse(&original_ace_object).unwrap().1;
395 assert_eq!(result.ace_type, 5);
396 println!("ACE_ALLOWED_OBJECT: {:?}",result);
397 }
398
399 #[test]
400 #[rustfmt::skip]
401 pub fn test_acl_admin() {
402
403 let original_acl = vec![0x04, 0x00, 0x04, 0x0b, 0x34, 0x00, 0x00, 0x00, 0x05, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x16, 0x4c, 0xc0, 0x20, 0xd0, 0x11, 0xa7, 0x68, 0x00, 0xaa, 0x00, 0x6e, 0x05, 0x29, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x29, 0x02, 0x00, 0x00, 0x05, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, 0x20, 0x20, 0x5f, 0xa5, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd4, 0xcf, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x29, 0x02, 0x00, 0x00, 0x05, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0xc2, 0x0a, 0xbc, 0xa9, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd4, 0xcf, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x29, 0x02, 0x00, 0x00, 0x05, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf8, 0x88, 0x70, 0x03, 0xe1, 0x0a, 0xd2, 0x11, 0xb4, 0x22, 0x00, 0xa0, 0xc9, 0x68, 0xf9, 0x39, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x29, 0x02, 0x00, 0x00, 0x05, 0x00, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7f, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x05, 0x02, 0x00, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1d, 0xb1, 0xa9, 0x46, 0xae, 0x60, 0x5a, 0x40, 0xb7, 0xe8, 0xff, 0x8a, 0x58, 0xd4, 0x56, 0xd2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x30, 0x02, 0x00, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x9a, 0xb6, 0x6d, 0x22, 0x94, 0xd1, 0x11, 0xae, 0xbd, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x31, 0x02, 0x00, 0x00, 0x05, 0x00, 0x2c, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0xbc, 0x05, 0x58, 0xc9, 0xbd, 0x28, 0x44, 0xa5, 0xe2, 0x85, 0x6a, 0x0f, 0x4c, 0x18, 0x5e, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x31, 0x02, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x53, 0x1a, 0x72, 0xab, 0x2f, 0x1e, 0xd0, 0x11, 0x98, 0x19, 0x00, 0xaa, 0x00, 0x40, 0x52, 0x9b, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x53, 0x1a, 0x72, 0xab, 0x2f, 0x1e, 0xd0, 0x11, 0x98, 0x19, 0x00, 0xaa, 0x00, 0x40, 0x52, 0x9b, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x1a, 0x72, 0xab, 0x2f, 0x1e, 0xd0, 0x11, 0x98, 0x19, 0x00, 0xaa, 0x00, 0x40, 0x52, 0x9b, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x56, 0x1a, 0x72, 0xab, 0x2f, 0x1e, 0xd0, 0x11, 0x98, 0x19, 0x00, 0xaa, 0x00, 0x40, 0x52, 0x9b, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x42, 0x2f, 0xba, 0x59, 0xa2, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd3, 0xcf, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x01, 0x8d, 0xe4, 0xf8, 0xbc, 0xd1, 0x11, 0x87, 0x02, 0x00, 0xc0, 0x4f, 0xb9, 0x60, 0x50, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x86, 0xb8, 0xb5, 0x77, 0x4a, 0x94, 0xd1, 0x11, 0xae, 0xbd, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb3, 0x95, 0x57, 0xe4, 0x55, 0x94, 0xd1, 0x11, 0xae, 0xbd, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x86, 0xb8, 0xb5, 0x77, 0x4a, 0x94, 0xd1, 0x11, 0xae, 0xbd, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb2, 0x95, 0x57, 0xe4, 0x55, 0x94, 0xd1, 0x11, 0xae, 0xbd, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x28, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xb3, 0x95, 0x57, 0xe4, 0x55, 0x94, 0xd1, 0x11, 0xae, 0xbd, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0xff, 0x01, 0x0f, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0xff, 0x01, 0x0f, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x94, 0x00, 0x02, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0xff, 0x01, 0x0f, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x5c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x42, 0x16, 0x4c, 0xc0, 0x20, 0xd0, 0x11, 0xa7, 0x68, 0x00, 0xaa, 0x00, 0x6e, 0x05, 0x29, 0x14, 0xcc, 0x28, 0x48, 0x37, 0x14, 0xbc, 0x45, 0x9b, 0x07, 0xad, 0x6f, 0x01, 0x5e, 0x5f, 0x28, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x3c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x42, 0x16, 0x4c, 0xc0, 0x20, 0xd0, 0x11, 0xa7, 0x68, 0x00, 0xaa, 0x00, 0x6e, 0x05, 0x29, 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x05, 0x1a, 0x5c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x20, 0x20, 0x5f, 0xa5, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd4, 0xcf, 0x14, 0xcc, 0x28, 0x48, 0x37, 0x14, 0xbc, 0x45, 0x9b, 0x07, 0xad, 0x6f, 0x01, 0x5e, 0x5f, 0x28, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x3c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x10, 0x20, 0x20, 0x5f, 0xa5, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd4, 0xcf, 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x05, 0x1a, 0x5c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0xc2, 0x0a, 0xbc, 0xa9, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd4, 0xcf, 0x14, 0xcc, 0x28, 0x48, 0x37, 0x14, 0xbc, 0x45, 0x9b, 0x07, 0xad, 0x6f, 0x01, 0x5e, 0x5f, 0x28, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x3c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0xc2, 0x0a, 0xbc, 0xa9, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd4, 0xcf, 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x05, 0x1a, 0x5c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x42, 0x2f, 0xba, 0x59, 0xa2, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd3, 0xcf, 0x14, 0xcc, 0x28, 0x48, 0x37, 0x14, 0xbc, 0x45, 0x9b, 0x07, 0xad, 0x6f, 0x01, 0x5e, 0x5f, 0x28, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x3c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x42, 0x2f, 0xba, 0x59, 0xa2, 0x79, 0xd0, 0x11, 0x90, 0x20, 0x00, 0xc0, 0x4f, 0xc2, 0xd3, 0xcf, 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x05, 0x1a, 0x5c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x88, 0x70, 0x03, 0xe1, 0x0a, 0xd2, 0x11, 0xb4, 0x22, 0x00, 0xa0, 0xc9, 0x68, 0xf9, 0x39, 0x14, 0xcc, 0x28, 0x48, 0x37, 0x14, 0xbc, 0x45, 0x9b, 0x07, 0xad, 0x6f, 0x01, 0x5e, 0x5f, 0x28, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x3c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xf8, 0x88, 0x70, 0x03, 0xe1, 0x0a, 0xd2, 0x11, 0xb4, 0x22, 0x00, 0xa0, 0xc9, 0x68, 0xf9, 0x39, 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x05, 0x1a, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x6d, 0x02, 0x9b, 0x3c, 0x0d, 0x5c, 0x46, 0x8b, 0xee, 0x51, 0x99, 0xd7, 0x16, 0x5c, 0xba, 0x86, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x58, 0x00, 0x08, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x6d, 0x02, 0x9b, 0x3c, 0x0d, 0x5c, 0x46, 0x8b, 0xee, 0x51, 0x99, 0xd7, 0x16, 0x5c, 0xba, 0x86, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x58, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6d, 0x9e, 0xc6, 0xb7, 0xc7, 0x2c, 0xd2, 0x11, 0x85, 0x4e, 0x00, 0xa0, 0xc9, 0x83, 0xf6, 0x08, 0x86, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x58, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6d, 0x9e, 0xc6, 0xb7, 0xc7, 0x2c, 0xd2, 0x11, 0x85, 0x4e, 0x00, 0xa0, 0xc9, 0x83, 0xf6, 0x08, 0x9c, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x38, 0x00, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x6d, 0x9e, 0xc6, 0xb7, 0xc7, 0x2c, 0xd2, 0x11, 0x85, 0x4e, 0x00, 0xa0, 0xc9, 0x83, 0xf6, 0x08, 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x09, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x58, 0x00, 0x20, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x93, 0x7b, 0x1b, 0xea, 0x48, 0x5e, 0xd5, 0x46, 0xbc, 0x6c, 0x4d, 0xf4, 0xfd, 0xa7, 0x8a, 0x35, 0x86, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x4c, 0x00, 0x94, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x14, 0xcc, 0x28, 0x48, 0x37, 0x14, 0xbc, 0x45, 0x9b, 0x07, 0xad, 0x6f, 0x01, 0x5e, 0x5f, 0x28, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x1a, 0x4c, 0x00, 0x94, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x9c, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x12, 0x2c, 0x00, 0x94, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0xba, 0x7a, 0x96, 0xbf, 0xe6, 0x0d, 0xd0, 0x11, 0xa2, 0x85, 0x00, 0xaa, 0x00, 0x30, 0x49, 0xe2, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x05, 0x12, 0x28, 0x00, 0x30, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x47, 0xe6, 0x91, 0x6f, 0xd9, 0x70, 0x4b, 0x95, 0x57, 0xd6, 0x3f, 0xf4, 0xf3, 0xcc, 0xd8, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x12, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0xd6, 0x47, 0x5b, 0x90, 0x60, 0xb2, 0x40, 0x9f, 0x37, 0x2a, 0x4d, 0xe8, 0x8f, 0x30, 0x63, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x0e, 0x02, 0x00, 0x00, 0x05, 0x12, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0xd6, 0x47, 0x5b, 0x90, 0x60, 0xb2, 0x40, 0x9f, 0x37, 0x2a, 0x4d, 0xe8, 0x8f, 0x30, 0x63, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x0f, 0x02, 0x00, 0x00, 0x05, 0x12, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbe, 0x3b, 0x0e, 0xf3, 0xf0, 0x9f, 0xd1, 0x11, 0xb6, 0x03, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x52, 0x04, 0x00, 0x00, 0x05, 0x12, 0x38, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xbf, 0x3b, 0x0e, 0xf3, 0xf0, 0x9f, 0xd1, 0x11, 0xb6, 0x03, 0x00, 0x00, 0xf8, 0x03, 0x67, 0xc1, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x52, 0x04, 0x00, 0x00, 0x05, 0x12, 0x28, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xe5, 0xc3, 0x78, 0x3f, 0x9a, 0xf7, 0xbd, 0x46, 0xa0, 0xb8, 0x9d, 0x18, 0x11, 0x6d, 0xdc, 0x79, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x12, 0x24, 0x00, 0xff, 0x01, 0x0f, 0x00, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x15, 0x00, 0x00, 0x00, 0xc1, 0x20, 0x09, 0x42, 0x30, 0x14, 0x92, 0xf5, 0x91, 0xfe, 0x95, 0x5f, 0x07, 0x02, 0x00, 0x00, 0x00, 0x12, 0x18, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x2a, 0x02, 0x00, 0x00, 0x00, 0x12, 0x18, 0x00, 0xbd, 0x01, 0x0f, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00];
410 let acl = Acl::parse(&original_acl).unwrap().1;
411
412 assert_eq!(acl.acl_revision, 4);
413 assert_eq!(acl.acl_size, 2820);
414 assert_eq!(acl.ace_count, 52);
415
416 println!("ACL: {:?}",&acl.data);
418 let mut count = 1;
419 for ace in &acl.data {
420 println!("[{}: ACE] {:?}\n",count,ace);
421 println!("[{} ACE.DATA] {:?}\n", count, &ace.data);
422 count +=1;
423 }
424 }
425}