SystemAclTest.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. // SystemAclTest.cs - NUnit Test Cases for SystemAcl
  2. //
  3. // Authors:
  4. // James Bellinger <[email protected]>
  5. //
  6. // Copyright (C) 2012 James Bellinger
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Security.AccessControl;
  10. using System.Security.Principal;
  11. using NUnit.Framework;
  12. namespace MonoTests.System.Security.AccessControl
  13. {
  14. [TestFixture]
  15. public class SystemAclTest
  16. {
  17. [Test]
  18. public void StartsEmpty ()
  19. {
  20. Assert.AreEqual (0, new SystemAcl (false, false, 0).Count);
  21. //Assert.AreEqual (0, new SystemAcl (false, false, null).Count);
  22. // ^ MS.NET has a bug here and throws, contrary to their own documentation.
  23. }
  24. [Test]
  25. public void AddAuditMergesFlags ()
  26. {
  27. SecurityIdentifier sid = new SecurityIdentifier ("BA");
  28. SystemAcl sacl = new SystemAcl (false, false, 0);
  29. sacl.AddAudit (AuditFlags.Success, sid, 1, InheritanceFlags.None, PropagationFlags.None);
  30. sacl.AddAudit (AuditFlags.Failure, sid, 1, InheritanceFlags.None, PropagationFlags.None);
  31. Assert.AreEqual (1, sacl.Count);
  32. CommonAce ace = (CommonAce)sacl [0];
  33. Assert.AreEqual (AuditFlags.Success|AuditFlags.Failure, ace.AuditFlags);
  34. }
  35. [Test]
  36. public void AddAuditCommonAce ()
  37. {
  38. SecurityIdentifier sid = new SecurityIdentifier ("BA");
  39. SystemAcl sacl = new SystemAcl (false, false, 0);
  40. sacl.AddAudit (AuditFlags.Success, sid, 1, InheritanceFlags.None, PropagationFlags.None);
  41. Assert.AreEqual (1, sacl.Count);
  42. CommonAce ace = (CommonAce)sacl [0];
  43. Assert.AreEqual (AuditFlags.Success, ace.AuditFlags);
  44. Assert.AreEqual (1, ace.AccessMask);
  45. Assert.AreEqual ("S-1-5-32-544", ace.SecurityIdentifier.Value);
  46. Assert.IsFalse (ace.IsInherited);
  47. }
  48. [Test]
  49. public void AddAuditCommonAceUsingDSOverload ()
  50. {
  51. SecurityIdentifier sid = new SecurityIdentifier ("BA");
  52. SystemAcl sacl = new SystemAcl (false, true, 0);
  53. sacl.AddAudit (AuditFlags.Failure, sid, 1, InheritanceFlags.None, PropagationFlags.None,
  54. ObjectAceFlags.None, Guid.NewGuid (), Guid.NewGuid ());
  55. Assert.AreEqual (1, sacl.Count);
  56. CommonAce ace = (CommonAce)sacl [0];
  57. Assert.AreEqual (AuditFlags.Failure, ace.AuditFlags);
  58. Assert.AreEqual (1, ace.AccessMask);
  59. Assert.AreEqual ("S-1-5-32-544", ace.SecurityIdentifier.Value);
  60. Assert.IsFalse (ace.IsInherited);
  61. }
  62. [Test]
  63. public void AddAuditObjectAceAndCommonAce ()
  64. {
  65. SecurityIdentifier sid = new SecurityIdentifier ("BA");
  66. SystemAcl sacl = new SystemAcl (false, true, 0);
  67. sacl.AddAudit (AuditFlags.Success, sid, 1, InheritanceFlags.None, PropagationFlags.None,
  68. ObjectAceFlags.ObjectAceTypePresent, Guid.NewGuid (), Guid.Empty);
  69. sacl.AddAudit (AuditFlags.Success, sid, 1, InheritanceFlags.None, PropagationFlags.None,
  70. ObjectAceFlags.None, Guid.Empty, Guid.Empty);
  71. Assert.AreEqual (2, sacl.Count);
  72. CommonAce cace = (CommonAce)sacl [0];
  73. Assert.AreEqual (1, cace.AccessMask);
  74. Assert.AreEqual ("S-1-5-32-544", cace.SecurityIdentifier.Value);
  75. Assert.IsFalse (cace.IsCallback);
  76. Assert.IsFalse (cace.IsInherited);
  77. ObjectAce oace = (ObjectAce)sacl [1];
  78. Assert.AreEqual (1, oace.AccessMask);
  79. Assert.AreEqual ("S-1-5-32-544", oace.SecurityIdentifier.Value);
  80. Assert.IsFalse (oace.IsCallback);
  81. Assert.IsFalse (oace.IsInherited);
  82. sacl.AddAudit (AuditFlags.Success, sid, 2, InheritanceFlags.None, PropagationFlags.None,
  83. ObjectAceFlags.None, Guid.Empty, Guid.Empty);
  84. Assert.AreEqual (2, sacl.Count);
  85. CommonAce cace2 = (CommonAce)sacl [0];
  86. Assert.AreEqual (3, cace2.AccessMask);
  87. }
  88. [Test]
  89. public void RemoveSpecific ()
  90. {
  91. SecurityIdentifier sid = new SecurityIdentifier ("BA");
  92. SystemAcl sacl = new SystemAcl (false, false, 0);
  93. RemoveSpecificBegin (sid, sacl, InheritanceFlags.None);
  94. sacl.RemoveAuditSpecific (AuditFlags.Success, sid, 3, InheritanceFlags.None, PropagationFlags.None);
  95. Assert.AreEqual (0, sacl.Count);
  96. }
  97. [Test]
  98. public void RemoveSpecificUsingDSOverload ()
  99. {
  100. SecurityIdentifier sid = new SecurityIdentifier ("BA");
  101. SystemAcl sacl = new SystemAcl (false, true, 0);
  102. RemoveSpecificBegin (sid, sacl, InheritanceFlags.None);
  103. sacl.RemoveAuditSpecific (AuditFlags.Success, sid, 3, InheritanceFlags.None, PropagationFlags.None,
  104. ObjectAceFlags.ObjectAceTypePresent, Guid.Empty, Guid.Empty);
  105. Assert.AreEqual (1, sacl.Count);
  106. sacl.RemoveAuditSpecific (AuditFlags.Success, sid, 3, InheritanceFlags.None, PropagationFlags.None,
  107. ObjectAceFlags.None, Guid.Empty, Guid.Empty);
  108. Assert.AreEqual (0, sacl.Count);
  109. }
  110. void RemoveSpecificBegin (SecurityIdentifier sid, SystemAcl sacl, InheritanceFlags inheritanceFlags)
  111. {
  112. SecurityIdentifier otherSid = new SecurityIdentifier ("BU");
  113. sacl.AddAudit (AuditFlags.Success, sid, 3, inheritanceFlags, PropagationFlags.None);
  114. Assert.AreEqual (1, sacl.Count);
  115. sacl.RemoveAuditSpecific (AuditFlags.Failure, sid, 1, inheritanceFlags, PropagationFlags.None);
  116. Assert.AreEqual (1, sacl.Count);
  117. sacl.RemoveAuditSpecific (AuditFlags.Success, otherSid, 1, inheritanceFlags, PropagationFlags.None);
  118. Assert.AreEqual (1, sacl.Count);
  119. sacl.RemoveAuditSpecific (AuditFlags.Success, sid, 1, inheritanceFlags, PropagationFlags.None);
  120. Assert.AreEqual (1, sacl.Count);
  121. Assert.AreEqual (3, ((CommonAce)sacl [0]).AccessMask);
  122. sacl.RemoveAuditSpecific (AuditFlags.Success, sid, 3,
  123. inheritanceFlags ^ InheritanceFlags.ContainerInherit,
  124. PropagationFlags.None);
  125. Assert.AreEqual (1, sacl.Count);
  126. }
  127. [Test]
  128. public void SetAudit ()
  129. {
  130. SecurityIdentifier adminSid = new SecurityIdentifier ("BA"); // S-1-5-32-544
  131. SecurityIdentifier userSid = new SecurityIdentifier ("BU"); // S-1-5-32-545
  132. SystemAcl sacl = new SystemAcl (true, false, 0);
  133. sacl.SetAudit (AuditFlags.Success, adminSid, 1, InheritanceFlags.ObjectInherit, PropagationFlags.None);
  134. sacl.SetAudit (AuditFlags.Success, userSid, 2, InheritanceFlags.None, PropagationFlags.None);
  135. Assert.AreEqual (2, sacl.Count);
  136. CommonAce ace = (CommonAce)sacl [0];
  137. Assert.AreEqual (adminSid, ace.SecurityIdentifier);
  138. Assert.AreEqual (1, ace.AccessMask);
  139. sacl.SetAudit (AuditFlags.Success, adminSid, 4, InheritanceFlags.ObjectInherit, PropagationFlags.None);
  140. Assert.AreNotEqual (4, ace.AccessMask);
  141. ace = (CommonAce)sacl [0];
  142. Assert.AreEqual (4, ace.AccessMask);
  143. sacl.SetAudit (AuditFlags.Failure, adminSid, 4, InheritanceFlags.ObjectInherit, PropagationFlags.None);
  144. Assert.AreEqual (2, sacl.Count);
  145. ace = (CommonAce)sacl [0];
  146. Assert.AreEqual (AuditFlags.Failure, ace.AuditFlags);
  147. Assert.AreEqual (adminSid, ace.SecurityIdentifier);
  148. ace = (CommonAce)sacl [1];
  149. Assert.AreEqual (AuditFlags.Success, ace.AuditFlags);
  150. Assert.AreEqual (userSid, ace.SecurityIdentifier);
  151. }
  152. }
  153. }