diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 0ec69f9515..a1e86bbdd0 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -329,6 +329,8 @@ Trunk (Unreleased) HADOOP-10352. Recursive setfacl erroneously attempts to apply default ACL to files. (cnauroth) + HADOOP-10354. TestWebHDFS fails after merge of HDFS-4685 to trunk. (cnauroth) + OPTIMIZATIONS HADOOP-7761. Improve the performance of raw comparisons. (todd) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java index ac77c4124d..849b671c03 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/RawLocalFileSystem.java @@ -569,6 +569,11 @@ public class RawLocalFileSystem extends FileSystem { //expected format //-rw------- 1 username groupname ... String permission = t.nextToken(); + if (permission.length() > FsPermission.MAX_PERMISSION_LENGTH) { + //files with ACLs might have a '+' + permission = permission.substring(0, + FsPermission.MAX_PERMISSION_LENGTH); + } setPermission(FsPermission.valueOf(permission)); t.nextToken(); diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/FsPermission.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/FsPermission.java index 76950305ed..28956098c7 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/FsPermission.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/FsPermission.java @@ -48,6 +48,9 @@ public class FsPermission implements Writable { WritableFactories.setFactory(ImmutableFsPermission.class, FACTORY); } + /** Maximum acceptable length of a permission string to parse */ + public static final int MAX_PERMISSION_LENGTH = 10; + /** Create an immutable {@link FsPermission} object. */ public static FsPermission createImmutable(short permission) { return new ImmutableFsPermission(permission); @@ -319,9 +322,10 @@ public class FsPermission implements Writable { if (unixSymbolicPermission == null) { return null; } - else if (unixSymbolicPermission.length() != 10) { - throw new IllegalArgumentException("length != 10(unixSymbolicPermission=" - + unixSymbolicPermission + ")"); + else if (unixSymbolicPermission.length() != MAX_PERMISSION_LENGTH) { + throw new IllegalArgumentException(String.format( + "length != %d(unixSymbolicPermission=%s)", MAX_PERMISSION_LENGTH, + unixSymbolicPermission)); } int n = 0;