|
@@ -38,6 +38,7 @@ import org.apache.hadoop.hdfs.DFSConfigKeys;
|
|
|
import org.apache.hadoop.hdfs.DFSTestUtil;
|
|
|
import org.apache.hadoop.hdfs.MiniDFSCluster;
|
|
|
import org.apache.hadoop.hdfs.protocol.AclException;
|
|
|
+import org.apache.hadoop.hdfs.protocol.FsAclPermission;
|
|
|
import org.apache.hadoop.io.IOUtils;
|
|
|
import org.apache.hadoop.security.AccessControlException;
|
|
|
import org.apache.hadoop.security.UserGroupInformation;
|
|
@@ -118,7 +119,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -140,7 +141,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", READ_EXECUTE),
|
|
|
aclEntry(ACCESS, GROUP, READ_EXECUTE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -161,7 +162,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -177,7 +178,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", READ_WRITE),
|
|
|
aclEntry(ACCESS, GROUP, READ) }, returned);
|
|
|
- assertPermission((short)0660);
|
|
|
+ assertPermission((short)010660);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -195,7 +196,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, USER, ALL),
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -212,7 +213,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", ALL),
|
|
|
aclEntry(ACCESS, GROUP, READ) }, returned);
|
|
|
- assertPermission((short)0600);
|
|
|
+ assertPermission((short)010600);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -240,7 +241,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)01750);
|
|
|
+ assertPermission((short)011750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -286,7 +287,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -309,7 +310,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "bar", READ_WRITE),
|
|
|
aclEntry(ACCESS, GROUP, READ_WRITE) }, returned);
|
|
|
- assertPermission((short)0760);
|
|
|
+ assertPermission((short)010760);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -334,7 +335,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -382,7 +383,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, USER, ALL),
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -408,7 +409,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)01750);
|
|
|
+ assertPermission((short)011750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -436,7 +437,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", ALL),
|
|
|
aclEntry(ACCESS, GROUP, READ_EXECUTE) }, returned);
|
|
|
- assertPermission((short)0770);
|
|
|
+ assertPermission((short)010770);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -456,7 +457,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", ALL),
|
|
|
aclEntry(ACCESS, GROUP, READ_EXECUTE) }, returned);
|
|
|
- assertPermission((short)0770);
|
|
|
+ assertPermission((short)010770);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -501,7 +502,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", ALL),
|
|
|
aclEntry(ACCESS, GROUP, READ_EXECUTE) }, returned);
|
|
|
- assertPermission((short)01770);
|
|
|
+ assertPermission((short)011770);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -602,7 +603,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, ALL),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0770);
|
|
|
+ assertPermission((short)010770);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -621,7 +622,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", READ),
|
|
|
aclEntry(ACCESS, GROUP, READ) }, returned);
|
|
|
- assertPermission((short)0640);
|
|
|
+ assertPermission((short)010640);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -639,7 +640,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, ALL),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -679,7 +680,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, USER, ALL),
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0750);
|
|
|
+ assertPermission((short)010750);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -699,7 +700,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", READ),
|
|
|
aclEntry(ACCESS, GROUP, READ) }, returned);
|
|
|
- assertPermission((short)0670);
|
|
|
+ assertPermission((short)010670);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -723,7 +724,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, ALL),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)01770);
|
|
|
+ assertPermission((short)011770);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -768,7 +769,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, ALL),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0700);
|
|
|
+ assertPermission((short)010700);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -788,7 +789,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", READ),
|
|
|
aclEntry(ACCESS, GROUP, READ) }, returned);
|
|
|
- assertPermission((short)0600);
|
|
|
+ assertPermission((short)010600);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
@@ -810,10 +811,27 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, ALL),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission((short)0700);
|
|
|
+ assertPermission((short)010700);
|
|
|
assertAclFeature(true);
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testSetPermissionCannotSetAclBit() throws IOException {
|
|
|
+ FileSystem.mkdirs(fs, path, FsPermission.createImmutable((short)0750));
|
|
|
+ fs.setPermission(path, FsPermission.createImmutable((short)0700));
|
|
|
+ assertPermission((short)0700);
|
|
|
+ fs.setPermission(path,
|
|
|
+ new FsAclPermission(FsPermission.createImmutable((short)0755)));
|
|
|
+ INode inode = cluster.getNamesystem().getFSDirectory().getRoot().getNode(
|
|
|
+ path.toUri().getPath(), false);
|
|
|
+ assertNotNull(inode);
|
|
|
+ FsPermission perm = inode.getFsPermission();
|
|
|
+ assertNotNull(perm);
|
|
|
+ assertEquals(0755, perm.toShort());
|
|
|
+ assertEquals(0755, perm.toExtendedShort());
|
|
|
+ assertAclFeature(false);
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testDefaultAclNewFile() throws Exception {
|
|
|
FileSystem.mkdirs(fs, path, FsPermission.createImmutable((short)0750));
|
|
@@ -827,7 +845,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", ALL),
|
|
|
aclEntry(ACCESS, GROUP, READ_EXECUTE) }, returned);
|
|
|
- assertPermission(filePath, (short)0640);
|
|
|
+ assertPermission(filePath, (short)010640);
|
|
|
assertAclFeature(filePath, true);
|
|
|
}
|
|
|
|
|
@@ -881,7 +899,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, ALL),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission(dirPath, (short)0750);
|
|
|
+ assertPermission(dirPath, (short)010750);
|
|
|
assertAclFeature(dirPath, true);
|
|
|
}
|
|
|
|
|
@@ -916,7 +934,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, USER, ALL),
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, OTHER, NONE) }, returned);
|
|
|
- assertPermission(dirPath, (short)0750);
|
|
|
+ assertPermission(dirPath, (short)010750);
|
|
|
assertAclFeature(dirPath, true);
|
|
|
}
|
|
|
|
|
@@ -940,7 +958,7 @@ public abstract class FSAclBaseTest {
|
|
|
AclStatus s = fs.getAclStatus(dirPath);
|
|
|
AclEntry[] returned = s.getEntries().toArray(new AclEntry[0]);
|
|
|
assertArrayEquals(expected, returned);
|
|
|
- assertPermission(dirPath, (short)0750);
|
|
|
+ assertPermission(dirPath, (short)010750);
|
|
|
assertAclFeature(dirPath, true);
|
|
|
expected = new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", ALL),
|
|
@@ -948,7 +966,7 @@ public abstract class FSAclBaseTest {
|
|
|
s = fs.getAclStatus(filePath);
|
|
|
returned = s.getEntries().toArray(new AclEntry[0]);
|
|
|
assertArrayEquals(expected, returned);
|
|
|
- assertPermission(filePath, (short)0640);
|
|
|
+ assertPermission(filePath, (short)010640);
|
|
|
assertAclFeature(filePath, true);
|
|
|
}
|
|
|
|
|
@@ -972,12 +990,12 @@ public abstract class FSAclBaseTest {
|
|
|
AclStatus s = fs.getAclStatus(dirPath);
|
|
|
AclEntry[] returned = s.getEntries().toArray(new AclEntry[0]);
|
|
|
assertArrayEquals(expected, returned);
|
|
|
- assertPermission(dirPath, (short)0750);
|
|
|
+ assertPermission(dirPath, (short)010750);
|
|
|
assertAclFeature(dirPath, true);
|
|
|
s = fs.getAclStatus(subdirPath);
|
|
|
returned = s.getEntries().toArray(new AclEntry[0]);
|
|
|
assertArrayEquals(expected, returned);
|
|
|
- assertPermission(subdirPath, (short)0750);
|
|
|
+ assertPermission(subdirPath, (short)010750);
|
|
|
assertAclFeature(subdirPath, true);
|
|
|
}
|
|
|
|
|
@@ -1004,7 +1022,7 @@ public abstract class FSAclBaseTest {
|
|
|
AclStatus s = fs.getAclStatus(dirPath);
|
|
|
AclEntry[] returned = s.getEntries().toArray(new AclEntry[0]);
|
|
|
assertArrayEquals(expected, returned);
|
|
|
- assertPermission(dirPath, (short)0750);
|
|
|
+ assertPermission(dirPath, (short)010750);
|
|
|
assertAclFeature(dirPath, true);
|
|
|
expected = new AclEntry[] { };
|
|
|
s = fs.getAclStatus(linkPath);
|
|
@@ -1037,7 +1055,7 @@ public abstract class FSAclBaseTest {
|
|
|
assertArrayEquals(new AclEntry[] {
|
|
|
aclEntry(ACCESS, USER, "foo", ALL),
|
|
|
aclEntry(ACCESS, GROUP, READ_EXECUTE) }, returned);
|
|
|
- assertPermission(filePath, (short)0740);
|
|
|
+ assertPermission(filePath, (short)010740);
|
|
|
assertAclFeature(filePath, true);
|
|
|
}
|
|
|
|
|
@@ -1059,7 +1077,7 @@ public abstract class FSAclBaseTest {
|
|
|
aclEntry(DEFAULT, GROUP, READ_EXECUTE),
|
|
|
aclEntry(DEFAULT, MASK, ALL),
|
|
|
aclEntry(DEFAULT, OTHER, READ_EXECUTE) }, returned);
|
|
|
- assertPermission(dirPath, (short)0740);
|
|
|
+ assertPermission(dirPath, (short)010740);
|
|
|
assertAclFeature(dirPath, true);
|
|
|
}
|
|
|
|