You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ftpserver-commits@incubator.apache.org by ng...@apache.org on 2007/01/20 16:26:41 UTC
svn commit: r498139 - in /incubator/ftpserver/trunk:
core/src/java/org/apache/ftpserver/
ssl-tests/src/test/org/apache/ftpserver/ssl/
Author: ngn
Date: Sat Jan 20 08:26:40 2007
New Revision: 498139
URL: http://svn.apache.org/viewvc?view=rev&rev=498139
Log:
Fixing bug when a secure data connection is used and no data sent, as reported by Clinton Foster (http://permalink.gmane.org/gmane.comp.jakarta.ftpserver.devel/429). Fix as provided by Clinton and verified by Dave Roberts, thanks!
Adding two unit tests the reproduce the problem, one for listing an empty directory and one the retriving a zero length file.
Modified:
incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnectionFactory.java
incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/ExplicitSecurityTestTemplate.java
incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/SSLTestTemplate.java
Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnectionFactory.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnectionFactory.java?view=diff&rev=498139&r1=498138&r2=498139
==============================================================================
--- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnectionFactory.java (original)
+++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/FtpDataConnectionFactory.java Sat Jan 20 08:26:40 2007
@@ -23,6 +23,8 @@
import java.net.ServerSocket;
import java.net.Socket;
+import javax.net.ssl.SSLSocket;
+
import org.apache.commons.logging.Log;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.interfaces.DataConnectionConfig;
@@ -241,6 +243,13 @@
closeDataSocket();
log.warn("FtpDataConnection.getDataSocket()", ex);
throw ex;
+ }
+
+ // Make sure we initate the SSL handshake, or we'll
+ // get an error if we turn out not to send any data
+ // e.g. during the listing of an empty dir
+ if(dataSoc instanceof SSLSocket) {
+ ((SSLSocket)dataSoc).startHandshake();
}
return dataSoc;
Modified: incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/ExplicitSecurityTestTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/ExplicitSecurityTestTemplate.java?view=diff&rev=498139&r1=498138&r2=498139
==============================================================================
--- incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/ExplicitSecurityTestTemplate.java (original)
+++ incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/ExplicitSecurityTestTemplate.java Sat Jan 20 08:26:40 2007
@@ -21,10 +21,12 @@
import java.io.ByteArrayInputStream;
import java.io.File;
+import java.io.InputStream;
import javax.net.ssl.SSLServerSocketFactory;
import org.apache.commons.net.ftp.FTPReply;
+import org.apache.ftpserver.util.IoUtils;
public abstract class ExplicitSecurityTestTemplate extends SSLTestTemplate {
@@ -111,5 +113,35 @@
assertTrue(TEST_FILE2.exists());
assertEquals(TEST_DATA.length, TEST_FILE2.length());
+ }
+
+ public void testListEmptyDir() throws Exception {
+ client.setRemoteVerificationEnabled(false);
+ client.enterLocalPassiveMode();
+
+ client.execPROT("P");
+
+ File dir = new File(ROOT_DIR, "dir");
+ dir.mkdir();
+
+ client.listFiles(dir.getName());
+ }
+
+ public void testReceiveEmptyFile() throws Exception {
+ client.setRemoteVerificationEnabled(false);
+ client.enterLocalPassiveMode();
+
+ client.execPROT("P");
+
+ File file = new File(ROOT_DIR, "foo");
+ file.createNewFile();
+
+ InputStream is = null;
+ try {
+ is = client.retrieveFileStream(file.getName());
+ assertEquals(-1, is.read(new byte[1024]));
+ } finally {
+ IoUtils.close(is);
+ }
}
}
Modified: incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/SSLTestTemplate.java
URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/SSLTestTemplate.java?view=diff&rev=498139&r1=498138&r2=498139
==============================================================================
--- incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/SSLTestTemplate.java (original)
+++ incubator/ftpserver/trunk/ssl-tests/src/test/org/apache/ftpserver/ssl/SSLTestTemplate.java Sat Jan 20 08:26:40 2007
@@ -50,7 +50,7 @@
private static final Log log = LogFactory.getLog(SSLTestTemplate.class);
- private static final int DEFAULT_PORT = 12321;
+ private static final int DEFAULT_PORT = 12322;
protected static final String ADMIN_PASSWORD = "admin";
@@ -216,6 +216,8 @@
} catch (FTPConnectionClosedException e) {
// try again
}
+
+ System.out.println("Retrying!");
Thread.sleep(500);
attempts++;
}