Exemplo n.º 1
0
        private void Verify_FileSecurity_CreateFile(FileMode mode, FileSystemRights rights, FileShare share, int bufferSize, FileOptions options, FileSecurity expectedSecurity)
        {
            using var tempRootDir = new TempAclDirectory();
            string path     = tempRootDir.GenerateSubItemPath();
            var    fileInfo = new FileInfo(path);

            using (FileStream fs = fileInfo.Create(mode, rights, share, bufferSize, options, expectedSecurity))
            {
                Assert.True(fileInfo.Exists);
                tempRootDir.CreatedSubfiles.Add(fileInfo);

                var          actualFileInfo = new FileInfo(path);
                FileSecurity actualSecurity = actualFileInfo.GetAccessControl();

                if (expectedSecurity != null)
                {
                    VerifyAccessSecurity(expectedSecurity, actualSecurity);
                }
                else
                {
                    int count = actualSecurity.GetAccessRules(includeExplicit: true, includeInherited: false, typeof(SecurityIdentifier)).Count;
                    Assert.Equal(0, count);
                }
            }
        }
Exemplo n.º 2
0
        public void FileInfo_Create_FileSecurity_DenyAccessRule(FileSystemRights rightsToDeny)
        {
            var expectedSecurity = new FileSecurity();

            var identity = new SecurityIdentifier(WellKnownSidType.BuiltinUsersSid, null);

            // Add write deny rule
            var denyAccessRule = new FileSystemAccessRule(identity, rightsToDeny, AccessControlType.Deny);

            expectedSecurity.AddAccessRule(denyAccessRule);

            using var tempRootDir = new TempAclDirectory();

            string path     = tempRootDir.GenerateSubItemPath();
            var    fileInfo = new FileInfo(path);

            using FileStream stream = fileInfo.Create(
                      FileMode.CreateNew,
                      FileSystemRights.Write, // Create expects at least one write right
                      FileShare.None,
                      DefaultBufferSize,
                      FileOptions.None,
                      expectedSecurity);

            Assert.True(fileInfo.Exists);
            tempRootDir.CreatedSubfiles.Add(fileInfo);

            var          actualInfo     = new FileInfo(fileInfo.FullName);
            FileSecurity actualSecurity = actualInfo.GetAccessControl(AccessControlSections.Access);

            VerifyAccessSecurity(expectedSecurity, actualSecurity);
        }
Exemplo n.º 3
0
        public void FileInfo_Create_DirectoryNotFound()
        {
            using var tempRootDir = new TempAclDirectory();
            string path     = Path.Combine(tempRootDir.GenerateSubItemPath(), "file.txt");
            var    info     = new FileInfo(path);
            var    security = new FileSecurity();

            Assert.Throws <DirectoryNotFoundException>(() =>
                                                       info.Create(FileMode.CreateNew, FileSystemRights.FullControl, FileShare.None, DefaultBufferSize, FileOptions.None, security));
        }
Exemplo n.º 4
0
        public void DirectoryInfo_Create_NotFound_FullControl()
        {
            using var tempRootDir = new TempAclDirectory();
            string dirPath = Path.Combine(tempRootDir.GenerateSubItemPath(), "ParentDoesNotExist");

            var dirInfo  = new DirectoryInfo(dirPath);
            var security = GetDirectorySecurity(FileSystemRights.FullControl);

            // Succeeds because it creates the missing parent folder
            CreateDirectoryWithSecurity(dirInfo, security);
        }
Exemplo n.º 5
0
        public void DirectoryInfo_Create_NotFound()
        {
            using var tempRootDir = new TempAclDirectory();
            string dirPath = Path.Combine(tempRootDir.GenerateSubItemPath(), "ParentDoesNotExist");

            var dirInfo  = new DirectoryInfo(dirPath);
            var security = new DirectorySecurity();

            // Fails because the DirectorySecurity lacks any rights to create parent folder
            Assert.Throws <UnauthorizedAccessException>(() => CreateDirectoryWithSecurity(dirInfo, security));
        }
Exemplo n.º 6
0
        private void Verify_DirectorySecurity_CreateDirectory(DirectorySecurity expectedSecurity)
        {
            using var tempRootDir = new TempAclDirectory();
            string        path    = tempRootDir.GenerateSubItemPath();
            DirectoryInfo dirInfo = expectedSecurity.CreateDirectory(path);

            Assert.True(dirInfo.Exists);
            tempRootDir.CreatedSubdirectories.Add(dirInfo);

            var actualDirInfo = new DirectoryInfo(path);
            DirectorySecurity actualSecurity = actualDirInfo.GetAccessControl(AccessControlSections.Access);

            VerifyAccessSecurity(expectedSecurity, actualSecurity);
        }
Exemplo n.º 7
0
        public void DirectorySecurity_CreateDirectory_DirectoryAlreadyExists()
        {
            using var tempRootDir = new TempAclDirectory();
            string path = tempRootDir.GenerateSubItemPath();

            DirectorySecurity expectedSecurity = GetDirectorySecurity(FileSystemRights.FullControl);
            DirectoryInfo     dirInfo          = expectedSecurity.CreateDirectory(path);

            Assert.True(dirInfo.Exists);
            tempRootDir.CreatedSubdirectories.Add(dirInfo);

            var basicSecurity = new DirectorySecurity();
            // Already exists, existingDirInfo should have the original security, not the new basic security
            DirectoryInfo existingDirInfo = basicSecurity.CreateDirectory(path);

            DirectorySecurity actualSecurity = existingDirInfo.GetAccessControl(AccessControlSections.Access);

            VerifyAccessSecurity(expectedSecurity, actualSecurity);
        }