2 // System.Security.AccessControl.SystemAcl implementation
5 // Dick Porter <dick@ximian.com>
6 // Atsushi Enomoto <atsushi@ximian.com>
7 // James Bellinger <jfb@zer7.com>
9 // Copyright (C) 2006-2007 Novell, Inc (http://www.novell.com)
10 // Copyright (C) 2012 James Bellinger
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Security.Principal;
34 namespace System.Security.AccessControl
36 public sealed class SystemAcl : CommonAcl
38 public SystemAcl (bool isContainer, bool isDS, int capacity)
39 : base (isContainer, isDS, capacity)
43 public SystemAcl (bool isContainer, bool isDS, RawAcl rawAcl)
44 : base (isContainer, isDS, rawAcl)
48 public SystemAcl (bool isContainer, bool isDS, byte revision, int capacity)
49 : base (isContainer, isDS, revision, capacity)
53 public void AddAudit (AuditFlags auditFlags,
54 SecurityIdentifier sid, int accessMask,
55 InheritanceFlags inheritanceFlags,
56 PropagationFlags propagationFlags)
58 AddAce (AceQualifier.SystemAudit, sid, accessMask,
59 inheritanceFlags, propagationFlags, auditFlags);
62 public void AddAudit (AuditFlags auditFlags,
63 SecurityIdentifier sid, int accessMask,
64 InheritanceFlags inheritanceFlags,
65 PropagationFlags propagationFlags,
66 ObjectAceFlags objectFlags,
68 Guid inheritedObjectType)
70 AddAce (AceQualifier.SystemAudit, sid, accessMask,
71 inheritanceFlags, propagationFlags, auditFlags,
72 objectFlags, objectType, inheritedObjectType);
76 public bool RemoveAudit (AuditFlags auditFlags,
77 SecurityIdentifier sid,
79 InheritanceFlags inheritanceFlags,
80 PropagationFlags propagationFlags)
82 throw new NotImplementedException ();
86 public bool RemoveAudit (AuditFlags auditFlags,
87 SecurityIdentifier sid,
89 InheritanceFlags inheritanceFlags,
90 PropagationFlags propagationFlags,
91 ObjectAceFlags objectFlags,
93 Guid inheritedObjectType)
95 throw new NotImplementedException ();
98 public void RemoveAuditSpecific (AuditFlags auditFlags,
99 SecurityIdentifier sid,
101 InheritanceFlags inheritanceFlags,
102 PropagationFlags propagationFlags)
104 RemoveAceSpecific (AceQualifier.SystemAudit, sid, accessMask,
105 inheritanceFlags, propagationFlags, auditFlags);
109 public void RemoveAuditSpecific (AuditFlags auditFlags,
110 SecurityIdentifier sid,
112 InheritanceFlags inheritanceFlags,
113 PropagationFlags propagationFlags,
114 ObjectAceFlags objectFlags,
116 Guid inheritedObjectType)
118 RemoveAceSpecific (AceQualifier.SystemAudit, sid, accessMask,
119 inheritanceFlags, propagationFlags, auditFlags,
120 objectFlags, objectType, inheritedObjectType);
124 public void SetAudit (AuditFlags auditFlags,
125 SecurityIdentifier sid,
127 InheritanceFlags inheritanceFlags,
128 PropagationFlags propagationFlags)
130 SetAce (AceQualifier.SystemAudit, sid, accessMask,
131 inheritanceFlags, propagationFlags, auditFlags);
134 public void SetAudit (AuditFlags auditFlags,
135 SecurityIdentifier sid,
137 InheritanceFlags inheritanceFlags,
138 PropagationFlags propagationFlags,
139 ObjectAceFlags objectFlags,
141 Guid inheritedObjectType)
143 SetAce (AceQualifier.SystemAudit, sid, accessMask,
144 inheritanceFlags, propagationFlags, auditFlags,
145 objectFlags, objectType, inheritedObjectType);
148 internal override void ApplyCanonicalSortToExplicitAces ()
150 int explicitCount = GetCanonicalExplicitAceCount ();
151 ApplyCanonicalSortToExplicitAces (0, explicitCount);
154 internal override int GetAceInsertPosition (AceQualifier aceQualifier)
159 internal override bool IsAceMeaningless (GenericAce ace)
161 if (base.IsAceMeaningless (ace)) return true;
162 if (!IsValidAuditFlags (ace.AuditFlags)) return true;
164 QualifiedAce qace = ace as QualifiedAce;
166 if (!(AceQualifier.SystemAudit == qace.AceQualifier ||
167 AceQualifier.SystemAlarm == qace.AceQualifier)) return true;
173 static bool IsValidAuditFlags (AuditFlags auditFlags)
175 return auditFlags != AuditFlags.None &&
176 auditFlags == ((AuditFlags.Success|AuditFlags.Failure) & auditFlags);