RegistrySecurityTest.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // RegistrySecurityTest.cs - NUnit Test Cases for RegistrySecurity
  2. //
  3. // Authors:
  4. // James Bellinger ([email protected])
  5. #if !MOBILE
  6. using System;
  7. using System.IO;
  8. using System.Security.AccessControl;
  9. using System.Security.Principal;
  10. using Microsoft.Win32;
  11. using NUnit.Framework;
  12. namespace MonoTests.System.Security.AccessControl
  13. {
  14. [TestFixture]
  15. public class RegistrySecurityTest
  16. {
  17. [Test]
  18. public void ChangeGroupToEveryone ()
  19. {
  20. string keyName = @"SOFTWARE\Mono RegistrySecurityTest ChangeGroupToEveryone";
  21. RegistrySecurity security;
  22. if (PlatformID.Win32NT != Environment.OSVersion.Platform) {
  23. Assert.Ignore (); return;
  24. }
  25. try {
  26. using (RegistryKey key = Registry.CurrentUser.CreateSubKey (keyName)) {
  27. // Before we begin manipulating this, make sure we're in the right spot.
  28. Assert.AreEqual (key.Name, @"HKEY_CURRENT_USER\" + keyName);
  29. // Set the group to Everyone.
  30. SecurityIdentifier worldSid = new SecurityIdentifier ("WD");
  31. security = key.GetAccessControl ();
  32. security.SetGroup (worldSid);
  33. key.SetAccessControl (security);
  34. // Make sure it actually became Everyone.
  35. security = key.GetAccessControl ();
  36. Assert.AreEqual (worldSid, security.GetGroup (typeof(SecurityIdentifier)));
  37. }
  38. } finally {
  39. Registry.CurrentUser.DeleteSubKey (keyName);
  40. }
  41. }
  42. [Test]
  43. public void EveryoneCanRead ()
  44. {
  45. string keyName = @"Software\Mono RegistrySecurityTest EveryoneCanRead";
  46. RegistrySecurity security;
  47. if (PlatformID.Win32NT != Environment.OSVersion.Platform) {
  48. Assert.Ignore (); return;
  49. }
  50. try {
  51. using (RegistryKey key = Registry.CurrentUser.CreateSubKey (keyName)) {
  52. AuthorizationRuleCollection explicitRules, inheritedRules;
  53. // Before we begin manipulating this, make sure we're in the right spot.
  54. Assert.AreEqual (key.Name, @"HKEY_CURRENT_USER\" + keyName);
  55. // Let's add Everyone to the read list.
  56. SecurityIdentifier worldSid = new SecurityIdentifier ("WD");
  57. security = key.GetAccessControl ();
  58. inheritedRules = security.GetAccessRules (false, true, typeof (SecurityIdentifier));
  59. Assert.AreNotEqual (0, inheritedRules.Count);
  60. explicitRules = security.GetAccessRules (true, false, typeof (SecurityIdentifier));
  61. Assert.AreEqual (0, explicitRules.Count);
  62. security.AddAccessRule (new RegistryAccessRule (worldSid,
  63. RegistryRights.FullControl,
  64. AccessControlType.Allow));
  65. key.SetAccessControl (security);
  66. // Verify that we have our permission!
  67. security = key.GetAccessControl ();
  68. inheritedRules = security.GetAccessRules (false, true, typeof (SecurityIdentifier));
  69. Assert.AreNotEqual (0, inheritedRules.Count);
  70. explicitRules = security.GetAccessRules (true, false, typeof (SecurityIdentifier));
  71. Assert.AreEqual (1, explicitRules.Count);
  72. RegistryAccessRule rule = (RegistryAccessRule)explicitRules [0];
  73. Assert.AreEqual (AccessControlType.Allow, rule.AccessControlType);
  74. Assert.AreEqual (worldSid, rule.IdentityReference);
  75. Assert.AreEqual (InheritanceFlags.None, rule.InheritanceFlags);
  76. Assert.AreEqual (PropagationFlags.None, rule.PropagationFlags);
  77. Assert.AreEqual (RegistryRights.FullControl, rule.RegistryRights);
  78. Assert.IsFalse (rule.IsInherited);
  79. }
  80. } finally {
  81. Registry.CurrentUser.DeleteSubKey (keyName);
  82. }
  83. }
  84. }
  85. }
  86. #endif