Frits Jalvingh created NET-702:
----------------------------------
Summary: FTPSClient fails on listFiles()
Key: NET-702
URL: https://issues.apache.org/jira/browse/NET-702
Project: Commons Net
Issue Type: Bug
Components: FTP
Affects Versions: 3.8.0, 3.7.2
Reporter: Frits Jalvingh
Calling ftpsclient.listFiles() fails in all ways.
See the program below.
Not having the "magic incantations" (execPROT("P")) makes it fail because it
returns no files without ANY indication of error, even though the remote server
answered with a "522 data connections must be encrypted" error. This is silent
failure.
If you do add the execPROC call then listFiles fails with the following
exception:
Exception in thread "main" javax.net.ssl.SSLProtocolException: Received
close_notify during handshakeException in thread "main"
javax.net.ssl.SSLProtocolException: Received close_notify during handshake at
java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129) at
java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) at
java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:308) at
java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:264) at
java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:255) at
java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:250) at
java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164) at
java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1155) at
java.base/sun.security.ssl.SSLSocketImpl.readApplicationRecord(SSLSocketImpl.java:1125)
at
java.base/sun.security.ssl.SSLSocketImpl$AppInputStream.read(SSLSocketImpl.java:823)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284) at
java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326) at
java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178) at
java.base/java.io.InputStreamReader.read(InputStreamReader.java:185) at
java.base/java.io.BufferedReader.fill(BufferedReader.java:161) at
java.base/java.io.BufferedReader.readLine(BufferedReader.java:326) at
java.base/java.io.BufferedReader.readLine(BufferedReader.java:392) at
org.apache.commons.net.ftp.FTPFileEntryParserImpl.readNextEntry(FTPFileEntryParserImpl.java:53)
at
org.apache.commons.net.ftp.FTPListParseEngine.read(FTPListParseEngine.java:139)
at
org.apache.commons.net.ftp.FTPListParseEngine.readServerList(FTPListParseEngine.java:119)
at
org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2264)
at
org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2390)
at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2651) at
org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2595) at
nl.skarp.dataloader.datasources.TestFtps.main(TestFtps.java:40)
The program I used:
{code:java}
public class TestFtps {
static public void main(String[] args) throws Exception {
FTPSClient client = new FTPSClient();
client.connect("localhost");
int reply = client.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)) {
throw new DataAccessConfigException("ftp(s) server refused
connection");
}
client.enterLocalPassiveMode(); // For firewall usage
System.out.println("ftp: login");
if(!client.login("jal", "possward")) {
throw new DataAccessConfigException("ftp(s) login failed");
}
client.setFileType(FTP.BINARY_FILE_TYPE);
client.type(FTP.BINARY_FILE_TYPE);
System.out.println("ftp: set passive mode");
//client.enterLocalPassiveMode(); // For firewall usage
System.out.println("Fixing ftps listing");
FTPSClient ftpsClient = (FTPSClient) client;
ftpsClient.execPROT("P");
ftpsClient.execPBSZ(0);
FTPFile[] ftpFiles = client.listFiles();
for(FTPFile ftpFile : ftpFiles) {
System.out.println("Got file " + ftpFile.getName());
}
}
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)