Halve the stack depth for both the new single step tests
[mono.git] / mcs / class / System / System.Security.AccessControl / SemaphoreSecurity.cs
1 //
2 // System.Security.AccessControl.SemaphoreSecurity class
3 //
4 // Authors:
5 //      Sebastien Pouliot  <sebastien@ximian.com>
6 //      Dick Porter <dick@ximian.com>
7 //      James Bellinger  <jfb@zer7.com>
8 //
9 // Copyright (C) 2005, 2006 Novell, Inc (http://www.novell.com)
10 // Copyright (C) 2012       James Bellinger
11 //
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:
19 // 
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
22 // 
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.
30 //
31
32 using System.Runtime.InteropServices;
33 using System.Security.Principal;
34
35 namespace System.Security.AccessControl
36 {
37         [ComVisible (false)]
38         public sealed class SemaphoreSecurity : NativeObjectSecurity
39         {
40                 public SemaphoreSecurity ()
41                         : base (false, ResourceType.KernelObject)
42                 {
43                 }
44
45                 public SemaphoreSecurity (string name, AccessControlSections includeSections)
46                         : base (false, ResourceType.KernelObject, name, includeSections)
47                 {
48                 }
49                 
50                 internal SemaphoreSecurity (SafeHandle handle, AccessControlSections includeSections)
51                         : base (false, ResourceType.KernelObject, handle, includeSections)
52                 {
53                 }
54                 
55                 public override Type AccessRightType {
56                         get { return typeof (SemaphoreRights); }
57                 }
58                 
59                 public override Type AccessRuleType {
60                         get { return typeof (SemaphoreAccessRule); }
61                 }
62
63                 public override Type AuditRuleType {
64                         get { return typeof (SemaphoreAuditRule); }
65                 }
66                 
67                 public override AccessRule AccessRuleFactory (IdentityReference identityReference, int accessMask,
68                                                               bool isInherited, InheritanceFlags inheritanceFlags,
69                                                               PropagationFlags propagationFlags, AccessControlType type)
70                 {
71                         return new SemaphoreAccessRule (identityReference, (SemaphoreRights)accessMask, type);
72                 }
73                 
74                 public void AddAccessRule (SemaphoreAccessRule rule)
75                 {
76                         AddAccessRule ((AccessRule)rule);
77                 }
78                 
79                 public bool RemoveAccessRule (SemaphoreAccessRule rule)
80                 {
81                         return RemoveAccessRule ((AccessRule)rule);
82                 }
83                 
84                 public void RemoveAccessRuleAll (SemaphoreAccessRule rule)
85                 {
86                         RemoveAccessRuleAll ((AccessRule)rule);
87                 }
88                 
89                 public void RemoveAccessRuleSpecific (SemaphoreAccessRule rule)
90                 {
91                         RemoveAccessRuleSpecific ((AccessRule)rule);
92                 }
93                 
94                 public void ResetAccessRule (SemaphoreAccessRule rule)
95                 {
96                         ResetAccessRule ((AccessRule)rule);
97                 }
98                 
99                 public void SetAccessRule (SemaphoreAccessRule rule)
100                 {
101                         SetAccessRule ((AccessRule)rule);
102                 }
103                 
104                 public override AuditRule AuditRuleFactory (IdentityReference identityReference, int accessMask, bool isInherited,
105                                                             InheritanceFlags inheritanceFlags, PropagationFlags propagationFlags,
106                                                             AuditFlags flags)
107                 {
108                         return new SemaphoreAuditRule (identityReference, (SemaphoreRights)accessMask, flags);
109                 }
110                 
111                 public void AddAuditRule (SemaphoreAuditRule rule)
112                 {
113                         AddAuditRule ((AuditRule)rule);
114                 }
115                 
116                 public bool RemoveAuditRule (SemaphoreAuditRule rule)
117                 {
118                         return RemoveAuditRule((AuditRule)rule);
119                 }
120                 
121                 public void RemoveAuditRuleAll (SemaphoreAuditRule rule)
122                 {
123                         RemoveAuditRuleAll((AuditRule)rule);
124                 }
125                 
126                 public void RemoveAuditRuleSpecific (SemaphoreAuditRule rule)
127                 {
128                         RemoveAuditRuleSpecific((AuditRule)rule);
129                 }
130                 
131                 public void SetAuditRule (SemaphoreAuditRule rule)
132                 {
133                         SetAuditRule((AuditRule)rule);
134                 }
135                 
136                 internal new void PersistModifications (SafeHandle handle)
137                 {
138                         WriteLock();
139                         try {
140                                 Persist (handle, (AccessRulesModified ? AccessControlSections.Access : 0) |
141                                                  (AuditRulesModified  ? AccessControlSections.Audit  : 0) |
142                                                  (OwnerModified       ? AccessControlSections.Owner  : 0) |
143                                                  (GroupModified       ? AccessControlSections.Group  : 0), null);
144                         } finally {
145                                 WriteUnlock ();
146                         }
147                 }
148         }
149 }
150