예제 #1
0
        public FileSystemSecurity GetSecurity(AccessControlSections sections)
        {
            lock (Lock) {
                FileSecurity security = new FileSecurity();

                if ((sections & AccessControlSections.Owner) != 0)
                {
                    security.SetOwner(_file.Owner);
                }
                if ((sections & AccessControlSections.Group) != 0)
                {
                    security.SetGroup(_file.Group);
                }
                if ((sections & AccessControlSections.Access) != 0)
                {
                    foreach (var r in _fileSystem.GetAccessRules(_file))
                    {
                        security.AddAccessRule(
                            new FileSystemAccessRule(r.IdentityReference, r.FileSystemRights, r.InheritanceFlags, r.PropagationFlags, r.AccessControlType));
                    }
                }
                if ((sections & AccessControlSections.Audit) != 0)
                {
                    foreach (var r in _fileSystem.GetAuditRules(_file))
                    {
                        security.AddAuditRule(
                            new FileSystemAuditRule(r.IdentityReference, r.FileSystemRights, r.InheritanceFlags, r.PropagationFlags, r.AuditFlags));
                    }
                }

                return(security);
            }
        }
예제 #2
0
        static IpfsDokan()
        {
            var everyone     = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
            var everyoneRead = new FileSystemAccessRule(everyone,
                                                        FileSystemRights.ReadAndExecute | FileSystemRights.ListDirectory,
                                                        AccessControlType.Allow);

            readonlyFileSecurity.AddAccessRule(everyoneRead);
            readonlyFileSecurity.SetOwner(everyone);
            readonlyFileSecurity.SetGroup(everyone);
            readonlyDirectorySecurity.AddAccessRule(everyoneRead);
            readonlyDirectorySecurity.SetOwner(everyone);
            readonlyDirectorySecurity.SetGroup(everyone);
        }
예제 #3
0
 public System.Security.AccessControl.FileSecurity GetFileSecurity(string path)
 {
     lock (lockThread)
     {
         Trace.WriteLine("Linux GetFileSecurity " + path);
         var fs = new FileSecurity();
         fs.SetOwner(new SecurityIdentifier(GetAttr(path, "system.nt_sec_desc.owner")));
         fs.SetGroup(new SecurityIdentifier(GetAttr(path, "system.nt_sec_desc.group")));
         var acls = GetAttr(path, "system.nt_sec_desc.acl.*");
         foreach (var acl in acls.Split(','))
         {
             var part        = acl.Split(':');
             var part2       = part[1].Split('/');
             var type        = int.Parse(part2[0]);
             var flags       = int.Parse(part2[1]);
             var access_mask = Convert.ToUInt32(part2[2], 16);
             fs.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(part[0]), (FileSystemRights)access_mask, (AccessControlType)type));
         }
         return(fs);
     }
 }