Author: ngn
Date: Wed Dec 10 12:52:32 2008
New Revision: 725428

URL: http://svn.apache.org/viewvc?rev=725428&view=rev
Log:
Reply with an error when listing non-existing directory or file (FTPSERVER-228)

Modified:
    
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/impl/LIST.java
    
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
    
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ListTest.java

Modified: 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/impl/LIST.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/impl/LIST.java?rev=725428&r1=725427&r2=725428&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/impl/LIST.java
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/java/org/apache/ftpserver/command/impl/LIST.java
 Wed Dec 10 12:52:32 2008
@@ -32,6 +32,7 @@
 import org.apache.ftpserver.ftplet.DataConnectionFactory;
 import org.apache.ftpserver.ftplet.DefaultFtpReply;
 import org.apache.ftpserver.ftplet.FtpException;
+import org.apache.ftpserver.ftplet.FtpFile;
 import org.apache.ftpserver.ftplet.FtpReply;
 import org.apache.ftpserver.ftplet.FtpRequest;
 import org.apache.ftpserver.impl.FtpIoSession;
@@ -76,6 +77,21 @@
             // reset state variables
             session.resetState();
 
+            // parse argument
+            ListArgument parsedArg = ListArgumentParser.parse(request
+                    .getArgument());
+
+            // checl that the directory or file exists
+            FtpFile file = 
session.getFileSystemView().getFile(parsedArg.getFile());
+            
+            if(!file.doesExist()) {
+                LOG.debug("Listing on a non-existing file");
+                session.write(LocalizedFtpReply.translate(session, request, 
context,
+                        FtpReply.REPLY_450_REQUESTED_FILE_ACTION_NOT_TAKEN, 
"LIST",
+                        null));             
+                return;
+            }
+            
             // 24-10-2007 - added check if PORT or PASV is issued, see
             // https://issues.apache.org/jira/browse/FTPSERVER-110
             DataConnectionFactory connFactory = session.getDataConnection();
@@ -109,10 +125,6 @@
             boolean failure = false;
 
             try {
-                // parse argument
-                ListArgument parsedArg = ListArgumentParser.parse(request
-                        .getArgument());
-
                 dataConnection.transferToClient(session.getFtpletSession(), 
directoryLister.listFiles(
                         parsedArg, session.getFileSystemView(),
                         LIST_FILE_FORMATER));

Modified: 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties?rev=725428&r1=725427&r2=725428&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
 (original)
+++ 
mina/ftpserver/trunk/core/src/main/resources/org/apache/ftpserver/message/FtpStatus.properties
 Wed Dec 10 12:52:32 2008
@@ -109,6 +109,7 @@
 551.LIST=File listing failed.
 501.LIST=Syntax error in parameters or arguments.
 226.LIST=Closing data connection.
+450.LIST=Non-existing file
 
 501.MDTM=Syntax error in parameters or arguments.
 213.MDTM={output.msg}

Modified: 
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ListTest.java
URL: 
http://svn.apache.org/viewvc/mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ListTest.java?rev=725428&r1=725427&r2=725428&view=diff
==============================================================================
--- 
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ListTest.java
 (original)
+++ 
mina/ftpserver/trunk/core/src/test/java/org/apache/ftpserver/clienttests/ListTest.java
 Wed Dec 10 12:52:32 2008
@@ -93,6 +93,10 @@
 
     }
 
+    public void testListFilesInNonExistingDir() throws Exception {
+        assertEquals(450, client.sendCommand("LIST", "nonexisting"));
+    }
+    
     public void testListFile() throws Exception {
 
         TEST_DIR1.mkdirs();
@@ -173,10 +177,8 @@
     }
 
     public void testListFileNonExistingFile() throws Exception {
-
-        FTPFile[] files = client.listFiles("foo");
-
-        assertEquals(0, files.length);
+        TEST_DIR1.mkdirs();
+        assertEquals(450, client.sendCommand("LIST", TEST_DIR1.getName() + 
"/nonexisting"));
     }
 
     public void testListNames() throws Exception {


Reply via email to