From d222e91bfa9f6d9318451967077017096860e5b3 Mon Sep 17 00:00:00 2001 From: Eli Collins Date: Tue, 3 Jul 2012 21:43:48 +0000 Subject: [PATCH] HDFS-3581. FSPermissionChecker#checkPermission sticky bit check missing range check. Contributed by Eli Collins git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1356972 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../hadoop/hdfs/server/namenode/FSPermissionChecker.java | 6 +++--- .../hadoop/hdfs/web/TestWebHdfsFileSystemContract.java | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index c26bda149f4..746586ba540 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -251,6 +251,9 @@ Release 2.0.1-alpha - UNRELEASED HDFS-3574. Fix small race and do some cleanup in GetImageServlet (todd) + HDFS-3581. FSPermissionChecker#checkPermission sticky bit check + missing range check. (eli) + BREAKDOWN OF HDFS-3042 SUBTASKS HDFS-2185. HDFS portion of ZK-based FailoverController (todd) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java index a60061b4b41..fd706b73350 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSPermissionChecker.java @@ -127,10 +127,10 @@ class FSPermissionChecker { ancestorIndex--); checkTraverse(inodes, ancestorIndex); - if(parentAccess != null && parentAccess.implies(FsAction.WRITE) - && inodes[inodes.length - 1] != null) + if (parentAccess != null && parentAccess.implies(FsAction.WRITE) + && inodes.length > 1 && inodes[inodes.length - 1] != null) { checkStickyBit(inodes[inodes.length - 2], inodes[inodes.length - 1]); - + } if (ancestorAccess != null && inodes.length > 1) { check(inodes, ancestorIndex, ancestorAccess); } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java index b49818cd685..2f65c1f0de4 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/web/TestWebHdfsFileSystemContract.java @@ -259,8 +259,8 @@ public class TestWebHdfsFileSystemContract extends FileSystemContractBaseTest { assertTrue(status != null); assertEquals(0777, status.getPermission().toShort()); - //delete root - disabled due to a sticky bit bug - //assertFalse(fs.delete(root, true)); + //delete root + assertFalse(fs.delete(root, true)); //create file using root path try {