You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cd...@apache.org on 2008/06/17 09:31:21 UTC

svn commit: r668483 - in /hadoop/core/trunk: CHANGES.txt src/core/org/apache/hadoop/fs/Trash.java src/test/org/apache/hadoop/dfs/TestTrash.java

Author: cdouglas
Date: Tue Jun 17 00:31:20 2008
New Revision: 668483

URL: http://svn.apache.org/viewvc?rev=668483&view=rev
Log:
HADOOP-3561. Prevent the trash from deleting its parent directories.


Modified:
    hadoop/core/trunk/CHANGES.txt
    hadoop/core/trunk/src/core/org/apache/hadoop/fs/Trash.java
    hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestTrash.java

Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=668483&r1=668482&r2=668483&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Tue Jun 17 00:31:20 2008
@@ -607,6 +607,9 @@
     HADOOP-3545. Fixes a overflow problem in archives.
     (Mahadev Konar via ddas)
 
+    HADOOP-3561. Prevent the trash from deleting its parent directories.
+    (cdouglas)
+
 Release 0.17.0 - 2008-05-18
 
   INCOMPATIBLE CHANGES

Modified: hadoop/core/trunk/src/core/org/apache/hadoop/fs/Trash.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/core/org/apache/hadoop/fs/Trash.java?rev=668483&r1=668482&r2=668483&view=diff
==============================================================================
--- hadoop/core/trunk/src/core/org/apache/hadoop/fs/Trash.java (original)
+++ hadoop/core/trunk/src/core/org/apache/hadoop/fs/Trash.java Tue Jun 17 00:31:20 2008
@@ -84,10 +84,17 @@
     if (!fs.exists(path))                         // check that path exists
       throw new FileNotFoundException(path.toString());
 
-    if (path.makeQualified(fs).toString().startsWith(trash.toString())) {
+    String qpath = path.makeQualified(fs).toString();
+
+    if (qpath.startsWith(trash.toString())) {
       return false;                               // already in trash
     }
 
+    if (trash.getParent().toString().startsWith(qpath)) {
+      throw new IOException("Cannot move \"" + path +
+                            "\" to the trash, as it contains the trash");
+    }
+
     Path trashPath = new Path(current, path.getName());
 
     IOException cause = null;

Modified: hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestTrash.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestTrash.java?rev=668483&r1=668482&r2=668483&view=diff
==============================================================================
--- hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestTrash.java (original)
+++ hadoop/core/trunk/src/test/org/apache/hadoop/dfs/TestTrash.java Tue Jun 17 00:31:20 2008
@@ -239,6 +239,22 @@
         assertTrue(val == 0);
         checkTrash(fs, trashRoot, args[1]);
       }
+
+      // attempt to remove parent of trash
+      {
+        String[] args = new String[2];
+        args[0] = "-rmr";
+        args[1] = trashRoot.getParent().getParent().toString();
+        int val = -1;
+        try {
+          val = shell.run(args);
+        } catch (Exception e) {
+          System.err.println("Exception raised from Trash.run " +
+                             e.getLocalizedMessage()); 
+        }
+        assertTrue(val == -1);
+        assertTrue(fs.exists(trashRoot));
+      }
     } finally {
       try {
         fs.close();