Exemplo n.º 1
0
 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);
         }
     });
 }
Exemplo n.º 2
0
 /// <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);
     }
 }
Exemplo n.º 3
0
        /**
         * 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));
        }
Exemplo n.º 4
0
 /// <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);
     }
 }
Exemplo n.º 5
0
 public static void SetMode(this TarEntry entry, PosixFilePermissions mode)
 {
     entry = entry ?? throw new ArgumentNullException(nameof(entry));
     entry.TarHeader.Mode = (int)mode;
 }
Exemplo n.º 6
0
 public FilePermissions(PosixFilePermissions permissionBits)
 {
     this.permissionBits = permissionBits;
 }
Exemplo n.º 7
0
 public static string ToOctalString(this PosixFilePermissions permissions)
 {
     return(Convert.ToString((int)(permissions & PosixFilePermissions.All), 8).PadLeft(3, '0'));
 }