Mehmet Can Cömert created NET-666:
-------------------------------------

             Summary: Pure-FTP MLSD Answer is not interpreted correctly
                 Key: NET-666
                 URL: https://issues.apache.org/jira/browse/NET-666
             Project: Commons Net
          Issue Type: Bug
          Components: FTP
    Affects Versions: 3.6
            Reporter: Mehmet Can Cömert
         Attachments: FileZillaLog.txt, ListFilesLog.txt, ListFilesTester.java

Hello,

For our integration tests, we made an FTPS server setup with Pure-FTP.
It is running with a self-signed TLS certificate in a docker container.

With FileZilla, we can make a connection and see files or we can 
upload/download files.
You can see the complete FileZilla communication logs in the FileZillaLog.txt
The part related to MLSD is like following:
-----
Command: MLSD
Trace: Trying to resume existing TLS session.
Trace: TLS Handshake successful
Trace: TLS Session resumed
Trace: Protocol: TLS1.2, Key exchange: ECDHE-RSA, Cipher: CHACHA20-POLY1305, 
MAC: AEAD
Trace: Hostname does not match certificate SANs
Response: 150 Accepted data connection
Response: 226-Options: -a -l 
Response: 226 3 matches total
Listing: 
type=cdir;sizd=30;modify=20190218135100;UNIX.mode=0755;UNIX.uid=1000;UNIX.gid=1000;unique=fd0eg103ba52;
 .
Listing: 
type=pdir;sizd=40;modify=20190218134929;UNIX.mode=0755;UNIX.uid=1000;UNIX.gid=0;unique=fd0eg81323a;
 ..
Listing: 
type=file;size=1002;modify=20190218135100;UNIX.mode=0644;UNIX.uid=1000;UNIX.gid=1000;unique=fd0eg103ba53;
 test-file.txt
Status: Directory listing of "/test" successful
----

With Commons-Net I have written a small test class based on CCCTester
The test file is available in ListFilesTester.java and complete logs in 
ListFilesLog.txt
The part related to MLSD is like following:
---
COMMAND: PASV
REPLY: 227 Entering Passive Mode (192,168,52,185,117,53)
COMMAND: MLSD
REPLY: 150 Accepted data connection
org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed 
without indication.
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:324)
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:300)
at org.apache.commons.net.ftp.FTP.getReply(FTP.java:732)
at 
org.apache.commons.net.ftp.FTPClient.completePendingCommand(FTPClient.java:1857)
at 
org.apache.commons.net.ftp.FTPClient.initiateMListParsing(FTPClient.java:3452)
at org.apache.commons.net.ftp.FTPClient.mlistDir(FTPClient.java:2546)
at org.apache.commons.net.ftp.FTPClient.mlistDir(FTPClient.java:2533)
at 
org.apache.commons.net.ftp.parser.ListFilesTester.test(ListFilesTester.java:48)
at 
org.apache.commons.net.ftp.parser.ListFilesTester.main(ListFilesTester.java:103)
---

Once we debug inside  __getReply method we can actually see 
150 Accepted data connection
message in "_replyLines" list but it is written in the list of previous answer 
lines. 
Next call to _controlInput_.readLine(); results NULL in the "line" variable and 
exception is thrown.

This issue seems also very similar to 
https://issues.apache.org/jira/browse/NET-598

It would be nice to make Pure-FTP working together with Commons-Net.
It is used in one of the popular Docker Images for FTP Servers and it is useful 
for integration tests.
Docker Image is available under:
https://hub.docker.com/r/stilliard/pure-ftpd/




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to