Uploaded image for project: 'FtpServer'
  1. FtpServer
  2. FTPSERVER-414

STAT / creates invalid directory listing (with Patch)

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.0.5
    • 1.0.6, 1.1.0
    • Server
    • None

    Description

      Some ftp clients (e.g. Cyberduck on Mac OS X) use the STAT command to list directores. The reply contains an invalid status code in the last line, which causes the ftp client to ignore the last line. So the last file in the directory does not show up in the ftp client listing:

      614869 [pool-3-thread-6] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: STAT /
      615085 [pool-3-thread-6] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 200--w------ 1 rototor@rototor.de rototor@rototor.de 21581 Jan 1 1970 uxz.pdf
      -w------ 1 rototor@rototor.de rototor@rototor.de 5788 Jan 1 1970 abc.pdf
      -w------ 1 rototor@rototor.de rototor@rototor.de 415447 Jan 1 1970 def.pdf
      200 -w------ 1 rototor@rototor.de rototor@rototor.de 822782 Jan 1 1970 xyz.pdf

      I dont know if this is a bug in the ftp client. But at least the following patch to the STAT command fixes the problem for me:

      diff --git a/org/apache/ftpserver/command/impl/STAT.java b/org/apache/ftpserver/command/impl/STAT.java
      index 19674b2..5ca76c1 100644
      — a/org/apache/ftpserver/command/impl/STAT.java
      +++ b/org/apache/ftpserver/command/impl/STAT.java
      @@ -77,10 +77,6 @@ public class STAT extends AbstractCommand {

      String dirList = directoryLister.listFiles(parsedArg,
      session.getFileSystemView(), LIST_FILE_FORMATER);
      + // DefaultFtpReply prepends the status code to the last line.
      + // This causes the STAT directory listing to loose the last directory entry in some clients
      + // e.g. Cyberduck
      + dirList += " \n";

      session
      .write(new DefaultFtpReply(

      With this patch applied the output looks like this:

      615085 [pool-3-thread-6] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 200--w------ 1 rototor@rototor.de rototor@rototor.de 21581 Jan 1 1970 uxz.pdf
      -w------ 1 rototor@rototor.de rototor@rototor.de 5788 Jan 1 1970 abc.pdf
      -w------ 1 rototor@rototor.de rototor@rototor.de 415447 Jan 1 1970 def.pdf
      -w------ 1 rototor@rototor.de rototor@rototor.de 822782 Jan 1 1970 xyz.pdf
      200

      And know the clients work correctly.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            niklas Niklas Therning
            rototor Emmeran Seehuber
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment