Allow at max one Remove operation to fail in tests.
[mono.git] / mcs / class / corlib / System.Security.AccessControl / CommonObjectSecurity.cs
index aea982bb0cddd68fd9eaa1f180e2599b3db70f9b..3addb6c5f564adf50ecdf89a3a7d49de78230458 100644 (file)
@@ -1,10 +1,11 @@
 //
 // System.Security.AccessControl.CommonObjectSecurity implementation
 //
-// Author:
+// Authors:
 //     Dick Porter  <dick@ximian.com>
+//     Atsushi Enomoto  <atsushi@ximian.com>
 //
-// Copyright (C) 2005, 2006 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005-2007 Novell, Inc (http://www.novell.com)
 //
 // 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_2_0
+using System.Collections.Generic;
 
 namespace System.Security.AccessControl {
 
        [MonoTODO ("required for NativeObjectSecurity - implementation is missing")]
        public abstract class CommonObjectSecurity : ObjectSecurity {
-               protected CommonObjectSecurity ()
-               {
-                       /* Give it a 0-param constructor */
-               }
-               
+
                protected CommonObjectSecurity (bool isContainer)
+                       : base (isContainer, false)
                {
                }
                
+               List<AccessRule> access_rules = new List<AccessRule> ();
+               List<AuditRule> audit_rules = new List<AuditRule> ();
+               
                public AuthorizationRuleCollection GetAccessRules (bool includeExplicit, bool includeInherited, Type targetType)
                {
                        throw new NotImplementedException ();
@@ -51,39 +52,77 @@ namespace System.Security.AccessControl {
                        throw new NotImplementedException ();
                }
                
+               // Access
+               
                protected void AddAccessRule (AccessRule rule)
                {
-                       throw new NotImplementedException ();
+                       access_rules.Add (rule);
+                       AccessRulesModified = true;
                }
                
-               protected void AddAuditRule (AuditRule rule)
+               protected bool RemoveAccessRule (AccessRule rule)
                {
                        throw new NotImplementedException ();
                }
                
-               protected override bool ModifyAccess (AccessControlModification modification, AccessRule rule, out bool modified)
+               protected void RemoveAccessRuleAll (AccessRule rule)
                {
                        throw new NotImplementedException ();
                }
                
-               protected override bool ModifyAudit (AccessControlModification modification, AuditRule rule, out bool modified)
+               protected void RemoveAccessRuleSpecific (AccessRule rule)
                {
                        throw new NotImplementedException ();
                }
                
-               protected bool RemoveAccessRule (AccessRule rule)
+               protected void ResetAccessRule (AccessRule rule)
                {
                        throw new NotImplementedException ();
                }
                
-               protected void RemoveAccessRuleAll (AccessRule rule)
+               protected void SetAccessRule (AccessRule rule)
                {
                        throw new NotImplementedException ();
                }
                
-               protected void RemoveAccessRuleSpecific (AccessRule rule)
+               protected override bool ModifyAccess (AccessControlModification modification, AccessRule rule, out bool modified)
                {
-                       throw new NotImplementedException ();
+                       foreach (AccessRule r in access_rules) {
+                               if (rule != r)
+                                       continue;
+                               switch (modification) {
+                               case AccessControlModification.Add:
+                                       AddAccessRule (rule);
+                                       break;
+                               case AccessControlModification.Set:
+                                       SetAccessRule (rule);
+                                       break;
+                               case AccessControlModification.Reset:
+                                       ResetAccessRule (rule);
+                                       break;
+                               case AccessControlModification.Remove:
+                                       RemoveAccessRule (rule);
+                                       break;
+                               case AccessControlModification.RemoveAll:
+                                       RemoveAccessRuleAll (rule);
+                                       break;
+                               case AccessControlModification.RemoveSpecific:
+                                       RemoveAccessRuleSpecific (rule);
+                                       break;
+                               }
+                               modified = true;
+                               return true;
+                       }
+                       modified = false;
+                       return false;
+               }
+               
+               // Audit
+               
+               protected void AddAuditRule (AuditRule rule)
+               {
+                       audit_rules.Add (rule);
+                       AuditRulesModified = true;
                }
                
                protected bool RemoveAuditRule (AuditRule rule)
@@ -101,21 +140,43 @@ namespace System.Security.AccessControl {
                        throw new NotImplementedException ();
                }
                
-               protected void ResetAccessRule (AccessRule rule)
-               {
-                       throw new NotImplementedException ();
-               }
-               
-               protected void SetAccessRule (AccessRule rule)
+               protected void SetAuditRule (AuditRule rule)
                {
                        throw new NotImplementedException ();
                }
                
-               protected void SetAuditRule (AuditRule rule)
+               protected override bool ModifyAudit (AccessControlModification modification, AuditRule rule, out bool modified)
                {
-                       throw new NotImplementedException ();
+                       foreach (AuditRule r in audit_rules) {
+                               if (rule != r)
+                                       continue;
+                               switch (modification) {
+                               case AccessControlModification.Add:
+                                       AddAuditRule (rule);
+                                       break;
+                               case AccessControlModification.Set:
+                                       SetAuditRule (rule);
+                                       break;
+                               //case AccessControlModification.Reset:
+                               //      ResetAuditRule (rule);
+                               //      break;
+                               case AccessControlModification.Remove:
+                                       RemoveAuditRule (rule);
+                                       break;
+                               case AccessControlModification.RemoveAll:
+                                       RemoveAuditRuleAll (rule);
+                                       break;
+                               case AccessControlModification.RemoveSpecific:
+                                       RemoveAuditRuleSpecific (rule);
+                                       break;
+                               }
+                               AuditRulesModified = true;
+                               modified = true;
+                               return true;
+                       }
+                       modified = false;
+                       return false;
                }
        }
 }
 
-#endif