You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2020/09/20 16:28:21 UTC
[commons-net] 01/02: [NET-687][FTPS] javax.net.ssl.SSLException:
Unsupported or unrecognized SSL message, #59.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-net.git
commit 2e2897dcb82308019bdd40be3b5eede7918a572d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Sep 20 12:22:10 2020 -0400
[NET-687][FTPS] javax.net.ssl.SSLException: Unsupported or unrecognized
SSL message, #59.
---
src/changes/changes.xml | 4 ++
.../org/apache/commons/net/ftp/FTPSClient.java | 1 -
.../org/apache/commons/net/ftp/FTPSClientTest.java | 48 ++++++++++++++++++----
.../apache/commons/net/ftpsserver/users.properties | 6 +--
.../org/apache/commons/net/test-data/file.txt | 20 +++++++++
5 files changed, 67 insertions(+), 12 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index c5a826d..7b8a13b 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -64,6 +64,10 @@ The <action> type attribute can be add,update,fix,remove.
<body>
<release version="3.8" date="20YY-MM-DD" description="TBD">
+ <action issue="NET-687" type="fix" dev="ggregory" due-to="Gary Gregory, Mikael, j-verse">
+ Update actions/checkout from v2.3.1 to v2.3.2 #56.
+ </action>
+ <!-- UPDATES -->
<action issue="NET-673" type="fix" dev="ggregory" due-to="Dependabot">
Update actions/checkout from v2.3.1 to v2.3.2 #56.
</action>
diff --git a/src/main/java/org/apache/commons/net/ftp/FTPSClient.java b/src/main/java/org/apache/commons/net/ftp/FTPSClient.java
index 02cf59a..504915e 100644
--- a/src/main/java/org/apache/commons/net/ftp/FTPSClient.java
+++ b/src/main/java/org/apache/commons/net/ftp/FTPSClient.java
@@ -620,7 +620,6 @@ public class FTPSClient extends FTPClient {
protected Socket _openDataConnection_(String command, String arg)
throws IOException {
Socket socket = super._openDataConnection_(command, arg);
- socket = createSSLSocket(socket);
_prepareDataSocket_(socket);
if (socket instanceof SSLSocket) {
SSLSocket sslSocket = (SSLSocket)socket;
diff --git a/src/test/java/org/apache/commons/net/ftp/FTPSClientTest.java b/src/test/java/org/apache/commons/net/ftp/FTPSClientTest.java
index 004c968..e781541 100644
--- a/src/test/java/org/apache/commons/net/ftp/FTPSClientTest.java
+++ b/src/test/java/org/apache/commons/net/ftp/FTPSClientTest.java
@@ -27,6 +27,7 @@ import java.net.SocketException;
import java.net.URL;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.output.NullOutputStream;
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.FtpException;
@@ -56,13 +57,10 @@ public class FTPSClientTest {
/**
* Returns the test directory as a String.
- * <p>
- * {@link #getTestDirectoryFile()} should be preferred.
- *
* @return the test directory as a String
*/
- private static String getTestDirectory() {
- return System.getProperty("test.basedir", "target/test-classes/test-data");
+ private static String getTestHomeDirectory() {
+ return System.getProperty("test.basedir", "target/test-classes/org/apache/commons/net/test-data");
}
private static final boolean implicit = false;
@@ -83,6 +81,7 @@ public class FTPSClientTest {
if (Server != null) {
return;
}
+ // Use an ephemeral port.
SocketPort = 0;
final FtpServerFactory serverFactory = new FtpServerFactory();
final PropertiesUserManagerFactory propertiesUserManagerFactory = new PropertiesUserManagerFactory();
@@ -93,7 +92,7 @@ public class FTPSClientTest {
final BaseUser user = (BaseUser) userManager.getUserByName("test");
// Pickup the home dir value at runtime even though we have it set in the user prop file
// The user prop file requires the "homedirectory" to be set
- user.setHomeDirectory(getTestDirectory());
+ user.setHomeDirectory(getTestHomeDirectory());
serverFactory.setUserManager(userManager);
final ListenerFactory factory = new ListenerFactory();
// set the port of the listener
@@ -125,13 +124,28 @@ public class FTPSClientTest {
private FTPSClient loginClient() throws SocketException, IOException {
FTPSClient client = new FTPSClient(implicit);
client.connect("localhost", SocketPort);
+ assertClientCode(client);
assertEquals(SocketPort, client.getRemotePort());
- final int replyCode = client.getReplyCode();
- assertTrue(FTPReply.isPositiveCompletion(replyCode));
+ //
assertTrue(client.login("test", "test"));
+ assertClientCode(client);
+ //
+ client.setFileType(FTP.BINARY_FILE_TYPE);
+ assertClientCode(client);
+ //
+ client.execPBSZ(0);
+ assertClientCode(client);
+ //
+ client.execPROT("P");
+ assertClientCode(client);
return client;
}
+ private void assertClientCode(FTPSClient client) {
+ final int replyCode = client.getReplyCode();
+ assertTrue(FTPReply.isPositiveCompletion(replyCode));
+ }
+
@Test
public void testOpenClose() throws SocketException, IOException {
loginClient().disconnect();
@@ -148,12 +162,29 @@ public class FTPSClientTest {
}
}
+ private void retrieveFile(String pathname) throws SocketException, IOException {
+ FTPSClient client = loginClient();
+ try {
+ // Do it twice.
+ // Just testing that we are not getting an SSL error (the file MUST be present).
+ assertTrue(pathname, client.retrieveFile(pathname, NullOutputStream.NULL_OUTPUT_STREAM));
+ assertTrue(pathname, client.retrieveFile(pathname, NullOutputStream.NULL_OUTPUT_STREAM));
+ } finally {
+ client.disconnect();
+ }
+ }
+
@Test
public void testListFilesPathNameRoot() throws SocketException, IOException {
testListFiles("/");
}
@Test
+ public void testRetrieveFilePathNameRoot() throws SocketException, IOException {
+ retrieveFile("/file.txt");
+ }
+
+ @Test
public void testListFilesPathNameEmpty() throws SocketException, IOException {
testListFiles("");
}
@@ -168,3 +199,4 @@ public class FTPSClientTest {
testListFiles(" Junk ");
}
}
+
diff --git a/src/test/resources/org/apache/commons/net/ftpsserver/users.properties b/src/test/resources/org/apache/commons/net/ftpsserver/users.properties
index 59fe696..521c443 100644
--- a/src/test/resources/org/apache/commons/net/ftpsserver/users.properties
+++ b/src/test/resources/org/apache/commons/net/ftpsserver/users.properties
@@ -17,7 +17,7 @@
# Password is "admin"
ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3
-ftpserver.user.admin.homedirectory=target/test-classes/test-data
+ftpserver.user.admin.homedirectory=target/test-classes/org/apache/commons/net/test-data
ftpserver.user.admin.enableflag=true
ftpserver.user.admin.writepermission=true
ftpserver.user.admin.maxloginnumber=0
@@ -27,7 +27,7 @@ ftpserver.user.admin.uploadrate=0
ftpserver.user.admin.downloadrate=0
ftpserver.user.anonymous.userpassword=
-ftpserver.user.anonymous.homedirectory=target/test-classes/test-data
+ftpserver.user.anonymous.homedirectory=target/test-classes/org/apache/commons/net/test-data
ftpserver.user.anonymous.enableflag=true
ftpserver.user.anonymous.writepermission=false
ftpserver.user.anonymous.maxloginnumber=20
@@ -38,6 +38,6 @@ ftpserver.user.anonymous.downloadrate=4800
# password is "test"
ftpserver.user.test.userpassword=098f6bcd4621d373cade4e832627b4f6
-ftpserver.user.test.homedirectory=target/test-classes/test-data
+ftpserver.user.test.homedirectory=target/test-classes/org/apache/commons/net/test-data
ftpserver.user.test.enableflag=true
ftpserver.user.test.writepermission=true
diff --git a/src/test/resources/org/apache/commons/net/test-data/file.txt b/src/test/resources/org/apache/commons/net/test-data/file.txt
new file mode 100644
index 0000000..eba8c13
--- /dev/null
+++ b/src/test/resources/org/apache/commons/net/test-data/file.txt
@@ -0,0 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+“We are all in the gutter, but some of us are looking at the stars.”
+
+― Oscar Wilde, Lady Windermere's Fan