Exemple #1
0
 /**
  * Verify the permissions for a file localized as a public distributed cache file
  *
  * @param fs The Local FileSystem used to get the permissions
  * @param localCacheFiles The list of files whose permissions should be verified.
  * @throws IOException
  */
 public static void checkPublicFilePermissions(FileSystem fs, Path[] localCacheFiles)
     throws IOException {
   // All the files should have read and executable permissions for others
   for (Path p : localCacheFiles) {
     FsPermission perm = fs.getFileStatus(p).getPermission();
     assertTrue(
         "cache file is not readable / executable by owner: perm=" + perm.getUserAction(),
         perm.getUserAction().implies(FsAction.READ_EXECUTE));
     assertTrue(
         "cache file is not readable / executable by group: perm=" + perm.getGroupAction(),
         perm.getGroupAction().implies(FsAction.READ_EXECUTE));
     assertTrue(
         "cache file is not readable / executable by others: perm=" + perm.getOtherAction(),
         perm.getOtherAction().implies(FsAction.READ_EXECUTE));
   }
 }
  /**
   * Set permissions to the required value. Uses the java primitives instead of forking if group ==
   * other.
   *
   * @param f the file to change
   * @param permission the new permissions
   * @throws IOException
   */
  public static void setPermission(File f, FsPermission permission) throws IOException {
    FsAction user = permission.getUserAction();
    FsAction group = permission.getGroupAction();
    FsAction other = permission.getOtherAction();

    // use the native/fork if the group/other permissions are different
    // or if the native is available
    if (group != other || NativeIO.isAvailable()) {
      execSetPermission(f, permission);
      return;
    }

    boolean rv = true;

    // read perms
    rv = f.setReadable(group.implies(FsAction.READ), false);
    checkReturnValue(rv, f, permission);
    if (group.implies(FsAction.READ) != user.implies(FsAction.READ)) {
      f.setReadable(user.implies(FsAction.READ), true);
      checkReturnValue(rv, f, permission);
    }

    // write perms
    rv = f.setWritable(group.implies(FsAction.WRITE), false);
    checkReturnValue(rv, f, permission);
    if (group.implies(FsAction.WRITE) != user.implies(FsAction.WRITE)) {
      f.setWritable(user.implies(FsAction.WRITE), true);
      checkReturnValue(rv, f, permission);
    }

    // exec perms
    rv = f.setExecutable(group.implies(FsAction.EXECUTE), false);
    checkReturnValue(rv, f, permission);
    if (group.implies(FsAction.EXECUTE) != user.implies(FsAction.EXECUTE)) {
      f.setExecutable(user.implies(FsAction.EXECUTE), true);
      checkReturnValue(rv, f, permission);
    }
  }
  // BZ908899
  @Test
  public void testPermissionsChanging() throws Exception {
    Path theFile = new Path("/mnt/glusterfs/changePerms/a");

    fs.create(theFile);

    FsPermission originalPermissions = this.fs.getFileStatus(theFile).getPermission();
    FsPermission changeTo = new FsPermission(FsAction.WRITE, FsAction.WRITE, FsAction.WRITE);
    this.fs.setPermission(theFile, changeTo);

    /**
     * Sanity check: Assert that the original permissions are different than the ones we changed to.
     */
    Assert.assertNotSame(originalPermissions, changeTo);

    /** Assert that we indeed changed the privileges to the exact expected values. */
    Assert.assertTrue(
        this.fs
            .getFileStatus(theFile)
            .getPermission()
            .getGroupAction()
            .equals(changeTo.getGroupAction()));
    Assert.assertTrue(
        this.fs
            .getFileStatus(theFile)
            .getPermission()
            .getUserAction()
            .equals(changeTo.getUserAction()));
    Assert.assertTrue(
        this.fs
            .getFileStatus(theFile)
            .getPermission()
            .getOtherAction()
            .equals(changeTo.getOtherAction()));
    fs.delete(new Path("mnt"), true);
  }
  @BeforeClass
  public static void startCluster() throws IOException {
    GCWatcher.init(0.60);
    LocalFileSystem localFS = FileSystem.getLocal(new Configuration());
    File testDirectory = new File(TMPDIR, "blur-cluster-test").getAbsoluteFile();
    testDirectory.mkdirs();

    Path directory = new Path(testDirectory.getPath());
    FsPermission dirPermissions = localFS.getFileStatus(directory).getPermission();
    FsAction userAction = dirPermissions.getUserAction();
    FsAction groupAction = dirPermissions.getGroupAction();
    FsAction otherAction = dirPermissions.getOtherAction();

    StringBuilder builder = new StringBuilder();
    builder.append(userAction.ordinal());
    builder.append(groupAction.ordinal());
    builder.append(otherAction.ordinal());
    String dirPermissionNum = builder.toString();
    System.setProperty("dfs.datanode.data.dir.perm", dirPermissionNum);
    testDirectory.delete();
    miniCluster = new MiniCluster();
    miniCluster.startBlurCluster(new File(testDirectory, "cluster").getAbsolutePath(), 2, 3, true);
    connectionStr = miniCluster.getControllerConnectionStr();
  }