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 {