Search in sources :

Example 26 with AclEntry

use of org.apache.hadoop.fs.permission.AclEntry in project hadoop by apache.

the class FSImageLoader method getAclEntryList.

private List<AclEntry> getAclEntryList(String path) throws IOException {
    long id = lookup(path);
    FsImageProto.INodeSection.INode inode = fromINodeId(id);
    switch(inode.getType()) {
        case FILE:
            {
                FsImageProto.INodeSection.INodeFile f = inode.getFile();
                return FSImageFormatPBINode.Loader.loadAclEntries(f.getAcl(), stringTable);
            }
        case DIRECTORY:
            {
                FsImageProto.INodeSection.INodeDirectory d = inode.getDirectory();
                return FSImageFormatPBINode.Loader.loadAclEntries(d.getAcl(), stringTable);
            }
        default:
            {
                return new ArrayList<AclEntry>();
            }
    }
}
Also used : FsImageProto(org.apache.hadoop.hdfs.server.namenode.FsImageProto) AclEntry(org.apache.hadoop.fs.permission.AclEntry) INode(org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INode) INodeFile(org.apache.hadoop.hdfs.server.namenode.INodeFile)

Example 27 with AclEntry

use of org.apache.hadoop.fs.permission.AclEntry in project hadoop by apache.

the class FSImageLoader method getAclStatus.

/**
   * Return the JSON formatted ACL status of the specified file.
   * @param path a path specifies a file
   * @return JSON formatted AclStatus
   * @throws IOException if failed to serialize fileStatus to JSON.
   */
String getAclStatus(String path) throws IOException {
    PermissionStatus p = getPermissionStatus(path);
    List<AclEntry> aclEntryList = getAclEntryList(path);
    FsPermission permission = p.getPermission();
    AclStatus.Builder builder = new AclStatus.Builder();
    builder.owner(p.getUserName()).group(p.getGroupName()).addEntries(aclEntryList).setPermission(permission).stickyBit(permission.getStickyBit());
    AclStatus aclStatus = builder.build();
    return JsonUtil.toJsonString(aclStatus);
}
Also used : AclStatus(org.apache.hadoop.fs.permission.AclStatus) AclEntry(org.apache.hadoop.fs.permission.AclEntry) FsPermission(org.apache.hadoop.fs.permission.FsPermission) PermissionStatus(org.apache.hadoop.fs.permission.PermissionStatus)

Example 28 with AclEntry

use of org.apache.hadoop.fs.permission.AclEntry in project hadoop by apache.

the class TestDFSShell method testCopyCommandsToDirectoryWithPreserveOption.

// verify cp -ptopxa option will preserve directory attributes.
@Test(timeout = 120000)
public void testCopyCommandsToDirectoryWithPreserveOption() throws Exception {
    FsShell shell = null;
    final String testdir = "/tmp/TestDFSShell-testCopyCommandsToDirectoryWithPreserveOption-" + counter.getAndIncrement();
    final Path hdfsTestDir = new Path(testdir);
    try {
        dfs.mkdirs(hdfsTestDir);
        Path srcDir = new Path(hdfsTestDir, "srcDir");
        dfs.mkdirs(srcDir);
        dfs.setAcl(srcDir, Lists.newArrayList(aclEntry(ACCESS, USER, ALL), aclEntry(ACCESS, USER, "foo", ALL), aclEntry(ACCESS, GROUP, READ_EXECUTE), aclEntry(DEFAULT, GROUP, "bar", READ_EXECUTE), aclEntry(ACCESS, OTHER, EXECUTE)));
        // set sticky bit
        dfs.setPermission(srcDir, new FsPermission(ALL, READ_EXECUTE, EXECUTE, true));
        // Create a file in srcDir to check if modification time of
        // srcDir to be preserved after copying the file.
        // If cp -p command is to preserve modification time and then copy child
        // (srcFile), modification time will not be preserved.
        Path srcFile = new Path(srcDir, "srcFile");
        dfs.create(srcFile).close();
        FileStatus status = dfs.getFileStatus(srcDir);
        final long mtime = status.getModificationTime();
        final long atime = status.getAccessTime();
        final String owner = status.getOwner();
        final String group = status.getGroup();
        final FsPermission perm = status.getPermission();
        dfs.setXAttr(srcDir, USER_A1, USER_A1_VALUE);
        dfs.setXAttr(srcDir, TRUSTED_A1, TRUSTED_A1_VALUE);
        shell = new FsShell(dfs.getConf());
        // -p
        Path targetDir1 = new Path(hdfsTestDir, "targetDir1");
        String[] argv = new String[] { "-cp", "-p", srcDir.toUri().toString(), targetDir1.toUri().toString() };
        int ret = ToolRunner.run(shell, argv);
        assertEquals("cp -p is not working", SUCCESS, ret);
        FileStatus targetStatus = dfs.getFileStatus(targetDir1);
        assertEquals(mtime, targetStatus.getModificationTime());
        assertEquals(atime, targetStatus.getAccessTime());
        assertEquals(owner, targetStatus.getOwner());
        assertEquals(group, targetStatus.getGroup());
        FsPermission targetPerm = targetStatus.getPermission();
        assertTrue(perm.equals(targetPerm));
        Map<String, byte[]> xattrs = dfs.getXAttrs(targetDir1);
        assertTrue(xattrs.isEmpty());
        List<AclEntry> acls = dfs.getAclStatus(targetDir1).getEntries();
        assertTrue(acls.isEmpty());
        assertFalse(targetPerm.getAclBit());
        // -ptop
        Path targetDir2 = new Path(hdfsTestDir, "targetDir2");
        argv = new String[] { "-cp", "-ptop", srcDir.toUri().toString(), targetDir2.toUri().toString() };
        ret = ToolRunner.run(shell, argv);
        assertEquals("cp -ptop is not working", SUCCESS, ret);
        targetStatus = dfs.getFileStatus(targetDir2);
        assertEquals(mtime, targetStatus.getModificationTime());
        assertEquals(atime, targetStatus.getAccessTime());
        assertEquals(owner, targetStatus.getOwner());
        assertEquals(group, targetStatus.getGroup());
        targetPerm = targetStatus.getPermission();
        assertTrue(perm.equals(targetPerm));
        xattrs = dfs.getXAttrs(targetDir2);
        assertTrue(xattrs.isEmpty());
        acls = dfs.getAclStatus(targetDir2).getEntries();
        assertTrue(acls.isEmpty());
        assertFalse(targetPerm.getAclBit());
        // -ptopx
        Path targetDir3 = new Path(hdfsTestDir, "targetDir3");
        argv = new String[] { "-cp", "-ptopx", srcDir.toUri().toString(), targetDir3.toUri().toString() };
        ret = ToolRunner.run(shell, argv);
        assertEquals("cp -ptopx is not working", SUCCESS, ret);
        targetStatus = dfs.getFileStatus(targetDir3);
        assertEquals(mtime, targetStatus.getModificationTime());
        assertEquals(atime, targetStatus.getAccessTime());
        assertEquals(owner, targetStatus.getOwner());
        assertEquals(group, targetStatus.getGroup());
        targetPerm = targetStatus.getPermission();
        assertTrue(perm.equals(targetPerm));
        xattrs = dfs.getXAttrs(targetDir3);
        assertEquals(xattrs.size(), 2);
        assertArrayEquals(USER_A1_VALUE, xattrs.get(USER_A1));
        assertArrayEquals(TRUSTED_A1_VALUE, xattrs.get(TRUSTED_A1));
        acls = dfs.getAclStatus(targetDir3).getEntries();
        assertTrue(acls.isEmpty());
        assertFalse(targetPerm.getAclBit());
        // -ptopa
        Path targetDir4 = new Path(hdfsTestDir, "targetDir4");
        argv = new String[] { "-cp", "-ptopa", srcDir.toUri().toString(), targetDir4.toUri().toString() };
        ret = ToolRunner.run(shell, argv);
        assertEquals("cp -ptopa is not working", SUCCESS, ret);
        targetStatus = dfs.getFileStatus(targetDir4);
        assertEquals(mtime, targetStatus.getModificationTime());
        assertEquals(atime, targetStatus.getAccessTime());
        assertEquals(owner, targetStatus.getOwner());
        assertEquals(group, targetStatus.getGroup());
        targetPerm = targetStatus.getPermission();
        assertTrue(perm.equals(targetPerm));
        xattrs = dfs.getXAttrs(targetDir4);
        assertTrue(xattrs.isEmpty());
        acls = dfs.getAclStatus(targetDir4).getEntries();
        assertFalse(acls.isEmpty());
        assertTrue(targetPerm.getAclBit());
        assertEquals(dfs.getAclStatus(srcDir), dfs.getAclStatus(targetDir4));
        // -ptoa (verify -pa option will preserve permissions also)
        Path targetDir5 = new Path(hdfsTestDir, "targetDir5");
        argv = new String[] { "-cp", "-ptoa", srcDir.toUri().toString(), targetDir5.toUri().toString() };
        ret = ToolRunner.run(shell, argv);
        assertEquals("cp -ptoa is not working", SUCCESS, ret);
        targetStatus = dfs.getFileStatus(targetDir5);
        assertEquals(mtime, targetStatus.getModificationTime());
        assertEquals(atime, targetStatus.getAccessTime());
        assertEquals(owner, targetStatus.getOwner());
        assertEquals(group, targetStatus.getGroup());
        targetPerm = targetStatus.getPermission();
        assertTrue(perm.equals(targetPerm));
        xattrs = dfs.getXAttrs(targetDir5);
        assertTrue(xattrs.isEmpty());
        acls = dfs.getAclStatus(targetDir5).getEntries();
        assertFalse(acls.isEmpty());
        assertTrue(targetPerm.getAclBit());
        assertEquals(dfs.getAclStatus(srcDir), dfs.getAclStatus(targetDir5));
    } finally {
        if (shell != null) {
            shell.close();
        }
    }
}
Also used : AclEntry(org.apache.hadoop.fs.permission.AclEntry) StringContains.containsString(org.hamcrest.core.StringContains.containsString) FsPermission(org.apache.hadoop.fs.permission.FsPermission) Test(org.junit.Test)

Example 29 with AclEntry

use of org.apache.hadoop.fs.permission.AclEntry in project hadoop by apache.

the class FSAclBaseTest method testRemoveDefaultAclOnlyDefault.

@Test
public void testRemoveDefaultAclOnlyDefault() throws Exception {
    FileSystem.mkdirs(fs, path, FsPermission.createImmutable((short) 0750));
    List<AclEntry> aclSpec = Lists.newArrayList(aclEntry(DEFAULT, USER, "foo", ALL));
    fs.setAcl(path, aclSpec);
    fs.removeDefaultAcl(path);
    AclStatus s = fs.getAclStatus(path);
    AclEntry[] returned = s.getEntries().toArray(new AclEntry[0]);
    assertArrayEquals(new AclEntry[] {}, returned);
    assertPermission((short) 0750);
    assertAclFeature(false);
    // restart of the cluster
    restartCluster();
    s = fs.getAclStatus(path);
    AclEntry[] afterRestart = s.getEntries().toArray(new AclEntry[0]);
    assertArrayEquals(returned, afterRestart);
}
Also used : AclStatus(org.apache.hadoop.fs.permission.AclStatus) AclEntry(org.apache.hadoop.fs.permission.AclEntry) Test(org.junit.Test)

Example 30 with AclEntry

use of org.apache.hadoop.fs.permission.AclEntry in project hadoop by apache.

the class FSAclBaseTest method testDefaultMinimalAclNewFile.

@Test
public void testDefaultMinimalAclNewFile() throws Exception {
    FileSystem.mkdirs(fs, path, FsPermission.createImmutable((short) 0750));
    List<AclEntry> aclSpec = Lists.newArrayList(aclEntry(DEFAULT, USER, ALL), aclEntry(DEFAULT, GROUP, READ_EXECUTE), aclEntry(DEFAULT, OTHER, NONE));
    fs.setAcl(path, aclSpec);
    Path filePath = new Path(path, "file1");
    fs.create(filePath).close();
    AclStatus s = fs.getAclStatus(filePath);
    AclEntry[] returned = s.getEntries().toArray(new AclEntry[0]);
    assertArrayEquals(new AclEntry[] {}, returned);
    assertPermission(filePath, (short) 0640);
    assertAclFeature(filePath, false);
}
Also used : Path(org.apache.hadoop.fs.Path) AclStatus(org.apache.hadoop.fs.permission.AclStatus) AclEntry(org.apache.hadoop.fs.permission.AclEntry) Test(org.junit.Test)

Aggregations

AclEntry (org.apache.hadoop.fs.permission.AclEntry)136 Test (org.junit.Test)90 AclStatus (org.apache.hadoop.fs.permission.AclStatus)81 Path (org.apache.hadoop.fs.Path)52 FsPermission (org.apache.hadoop.fs.permission.FsPermission)24 ArrayList (java.util.ArrayList)11 FSAclBaseTest (org.apache.hadoop.hdfs.server.namenode.FSAclBaseTest)11 FileSystem (org.apache.hadoop.fs.FileSystem)10 Configuration (org.apache.hadoop.conf.Configuration)7 MockResponse (com.squareup.okhttp.mockwebserver.MockResponse)5 FileStatus (org.apache.hadoop.fs.FileStatus)5 ScopedAclEntries (org.apache.hadoop.fs.permission.ScopedAclEntries)5 DistributedFileSystem (org.apache.hadoop.hdfs.DistributedFileSystem)5 DatanodeInfoBuilder (org.apache.hadoop.hdfs.protocol.DatanodeInfo.DatanodeInfoBuilder)5 List (java.util.List)4 AclEntryScope (org.apache.hadoop.fs.permission.AclEntryScope)4 AclEntryProto (org.apache.hadoop.hdfs.protocol.proto.AclProtos.AclEntryProto)4 IOException (java.io.IOException)3 URI (java.net.URI)3 AclEntryType (org.apache.hadoop.fs.permission.AclEntryType)3