Merge pull request #3591 from directhex/mono_libdir_fallback
[mono.git] / mcs / class / corlib / System.Security.AccessControl / ObjectSecurity_T.cs
index 40c43e1093979e7750f11f6a985eb8bccfe0c9c1..4bed60fc3b93acbda77c62ddc51f284fc284254c 100644 (file)
@@ -1,7 +1,12 @@
 //
 // System.Security.AccessControl.ObjectSecurity<T>
 //
+// Authors:
+//      ?
+//     James Bellinger  <jfb@zer7.com>
+//
 // Copyright (C) 2009 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2012 James Bellinger
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
-#if NET_4_0
+
+using System.Runtime.InteropServices;
+using System.Security.Principal;
 
 namespace System.Security.AccessControl
 {
-       public abstract class ObjectSecurity<T> : NativeObjectSecurity
+       public abstract class ObjectSecurity<T> : NativeObjectSecurity where T : struct
        {
+               protected ObjectSecurity (bool isContainer,
+                                         ResourceType resourceType)
+                       : base (isContainer, resourceType)
+               {
+
+               }
+               
+               protected ObjectSecurity (bool isContainer,
+                                         ResourceType resourceType,
+                                         SafeHandle safeHandle,
+                                         AccessControlSections includeSections)
+                       : base (isContainer, resourceType, safeHandle, includeSections)
+               {
+
+               }
+               
+               protected ObjectSecurity (bool isContainer,
+                                         ResourceType resourceType,
+                                         string name,
+                                         AccessControlSections includeSections)
+                       : base (isContainer, resourceType, name, includeSections)
+               {
+
+               }
+               
+               protected ObjectSecurity (bool isContainer,
+                                         ResourceType resourceType,
+                                         SafeHandle safeHandle,
+                                         AccessControlSections includeSections,
+                                         ExceptionFromErrorCode exceptionFromErrorCode,
+                                         object exceptionContext)
+                       : base (isContainer, resourceType, safeHandle, includeSections,
+                               exceptionFromErrorCode, exceptionContext)
+               {
+
+               }
+               
+               protected ObjectSecurity (bool isContainer,
+                                         ResourceType resourceType,
+                                         string name,
+                                         AccessControlSections includeSections,
+                                         ExceptionFromErrorCode exceptionFromErrorCode,
+                                         object exceptionContext)
+                       : base (isContainer, resourceType, name, includeSections,
+                               exceptionFromErrorCode, exceptionContext)
+               {
+
+               }
+
+               public override Type AccessRightType {
+                       get { return typeof (T); }
+               }
+               
+               public override Type AccessRuleType {
+                       get { return typeof (AccessRule<T>); }
+               }
+               
+               public override Type AuditRuleType {
+                       get { return typeof (AuditRule<T>); }
+               }
+               
+               public override AccessRule AccessRuleFactory(IdentityReference identityReference, int accessMask,
+                                                            bool isInherited, InheritanceFlags inheritanceFlags,
+                                                            PropagationFlags propagationFlags, AccessControlType type)
+               {
+                       return new AccessRule<T> (identityReference, accessMask, isInherited, inheritanceFlags, propagationFlags, type);
+               }
+               
+               public virtual void AddAccessRule (AccessRule<T> rule)
+               {
+                       AddAccessRule ((AccessRule)rule);
+               }
+               
+               public virtual bool RemoveAccessRule (AccessRule<T> rule)
+               {
+                       return RemoveAccessRule ((AccessRule)rule);
+               }
+               
+               public virtual void RemoveAccessRuleAll (AccessRule<T> rule)
+               {
+                       RemoveAccessRuleAll ((AccessRule)rule);
+               }
+               
+               public virtual void RemoveAccessRuleSpecific (AccessRule<T> rule)
+               {
+                       RemoveAccessRuleSpecific ((AccessRule)rule);
+               }
+               
+               public virtual void ResetAccessRule (AccessRule<T> rule)
+               {
+                       ResetAccessRule ((AccessRule)rule);
+               }
+               
+               public virtual void SetAccessRule (AccessRule<T> rule)
+               {
+                       SetAccessRule ((AccessRule)rule);
+               }
+               
+               public override AuditRule AuditRuleFactory(IdentityReference identityReference, int accessMask,
+                                                          bool isInherited, InheritanceFlags inheritanceFlags,
+                                                          PropagationFlags propagationFlags, AuditFlags flags)
+               {
+                       return new AuditRule<T> (identityReference, accessMask, isInherited, inheritanceFlags, propagationFlags, flags);
+               }
+               
+               public virtual void AddAuditRule (AuditRule<T> rule)
+               {
+                       AddAuditRule ((AuditRule)rule);
+               }
+               
+               public virtual bool RemoveAuditRule (AuditRule<T> rule)
+               {
+                       return RemoveAuditRule((AuditRule)rule);
+               }
+               
+               public virtual void RemoveAuditRuleAll (AuditRule<T> rule)
+               {
+                       RemoveAuditRuleAll((AuditRule)rule);
+               }
+               
+               public virtual void RemoveAuditRuleSpecific (AuditRule<T> rule)
+               {
+                       RemoveAuditRuleSpecific((AuditRule)rule);
+               }
+               
+               public virtual void SetAuditRule (AuditRule<T> rule)
+               {
+                       SetAuditRule((AuditRule)rule);
+               }
+               
+               protected void Persist (SafeHandle handle)
+               {
+                       WriteLock ();
+                       try {
+                               Persist (handle, AccessControlSectionsModified);
+                       } finally {
+                               WriteUnlock ();
+                       }
+               }
+               
+               protected void Persist (string name)
+               {
+                       WriteLock ();
+                       try {
+                               Persist (name, AccessControlSectionsModified);
+                       } finally {
+                               WriteUnlock ();
+                       }
+               }
        }
 }
        
-#endif
\ No newline at end of file
+