Esempio n. 1
0
        public static void WriteUnix(string file, SecureWriteCallback callback)
        {
            FilePermissions oldUmask = Syscall.umask(FilePermissions.S_IXUSR | FilePermissions.S_IRGRP | FilePermissions.S_IWGRP | FilePermissions.S_IXGRP | FilePermissions.S_IROTH | FilePermissions.S_IWOTH | FilePermissions.S_IXOTH);

            using (FileStream stream = File.Open(file, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                callback.Invoke(stream);
            }
            Syscall.umask(oldUmask);
        }
Esempio n. 2
0
 public static void Write(string file, SecureWriteCallback callback)
 {
     if (Platform.CurrentPlatform == PlatformType.Windows)
     {
         WriteWindows(file, callback);
     }
     else
     {
         WriteUnix(file, callback);
     }
 }
Esempio n. 3
0
        public static void WriteWindows(string file, SecureWriteCallback callback)
        {
            using (FileStream stream = File.Open(file, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                FileSecurity acl = File.GetAccessControl(file);

                acl.SetAccessRuleProtection(true, false);
                foreach (FileSystemAccessRule entry in acl.GetAccessRules(true, true, typeof(NTAccount)))
                {
                    acl.PurgeAccessRules(entry.IdentityReference);
                }

                acl.AddAccessRule(new FileSystemAccessRule(stream.GetAccessControl().GetOwner(typeof(NTAccount)), FileSystemRights.FullControl, AccessControlType.Allow));
                File.SetAccessControl(file, acl);
                callback.Invoke(stream);
            }
        }