public void TestPermissions() { Assert.AreEqual(FilePermissions.FromOctalString("644"), FilePermissions.DefaultFilePermissions); Assert.AreEqual(FilePermissions.FromOctalString("755"), FilePermissions.DefaultFolderPermissions); LayerEntriesDo( (layerName, layerEntry) => { if (layerEntry.IsFile()) { const PosixFilePermissions expectedFilePermissions = PosixFilePermissions.OwnerRead | PosixFilePermissions.OwnerWrite | PosixFilePermissions.GroupRead | PosixFilePermissions.OthersRead; Assert.AreEqual( expectedFilePermissions, layerEntry.GetMode() & PosixFilePermissions.All, layerName + ": " + layerEntry.Name); } else if (layerEntry.IsDirectory) { const PosixFilePermissions expectedDirectoryPermissions = PosixFilePermissions.OwnerAll | PosixFilePermissions.GroupReadExecute | PosixFilePermissions.OthersReadExecute; Assert.AreEqual( expectedDirectoryPermissions, layerEntry.GetMode() & PosixFilePermissions.All, layerName + ": " + layerEntry.Name); } }); }
/// <exception cref="System.IO.IOException"/> protected internal override void StashOriginalFilePermissions() { // save off permissions in case we need to // rewrite the keystore in flush() if (!Shell.Windows) { Path path = Paths.Get(file.GetCanonicalPath()); permissions = Files.GetPosixFilePermissions(path); } else { // On Windows, the JDK does not support the POSIX file permission APIs. // Instead, we can do a winutils call and translate. string[] cmd = Shell.GetGetPermissionCommand(); string[] args = new string[cmd.Length + 1]; System.Array.Copy(cmd, 0, args, 0, cmd.Length); args[cmd.Length] = file.GetCanonicalPath(); string @out = Shell.ExecCommand(args); StringTokenizer t = new StringTokenizer(@out, Shell.TokenSeparatorRegex); // The winutils output consists of 10 characters because of the leading // directory indicator, i.e. "drwx------". The JDK parsing method expects // a 9-character string, so remove the leading character. string permString = Runtime.Substring(t.NextToken(), 1); permissions = PosixFilePermissions.FromString(permString); } }
/** * Creates a new {@link FilePermissions} from a set of {@link PosixFilePermission}. * * @param posixFilePermissions the set of {@link PosixFilePermission} * @return a new {@link FilePermissions} with the given permissions */ public static FilePermissions FromPosixFilePermissions( ISet <PosixFilePermissions> posixFilePermissions) { posixFilePermissions = posixFilePermissions ?? throw new ArgumentNullException(nameof(posixFilePermissions)); PosixFilePermissions permissionBits = 0; foreach (PosixFilePermissions permission in posixFilePermissions) { permissionBits |= permission; } return(new FilePermissions(permissionBits)); }
/// <exception cref="System.IO.IOException"/> public override void Flush() { base.Flush(); if (!Shell.Windows) { Files.SetPosixFilePermissions(Paths.Get(file.GetCanonicalPath()), permissions); } else { // FsPermission expects a 10-character string because of the leading // directory indicator, i.e. "drwx------". The JDK toString method returns // a 9-character string, so prepend a leading character. FsPermission fsPermission = FsPermission.ValueOf("-" + PosixFilePermissions.ToString (permissions)); FileUtil.SetPermission(file, fsPermission); } }
public static void SetMode(this TarEntry entry, PosixFilePermissions mode) { entry = entry ?? throw new ArgumentNullException(nameof(entry)); entry.TarHeader.Mode = (int)mode; }
public FilePermissions(PosixFilePermissions permissionBits) { this.permissionBits = permissionBits; }
public static string ToOctalString(this PosixFilePermissions permissions) { return(Convert.ToString((int)(permissions & PosixFilePermissions.All), 8).PadLeft(3, '0')); }