RFC 3659:Extensions to FTP
RFC-Ref

8. S> 226 Listing completed.


   Note that this server returns its "unique" fact value in quite a
   different format.  It also returns fully qualified pathnames for the
   "pdir" entry.


8.1. Some IANA Files


 C> MLSD
 S> 150 BINARY connection open for MLSD .
 D> Type=cdir;Modify=19990219183438; /iana/assignments
 D> Type=pdir;Modify=19990112030453; ..
 D> Type=dir;Modify=19990219073522; media-types
 D> Type=dir;Modify=19990112033515; character-set-info
 D> Type=dir;Modify=19990112033529; languages
 D> Type=file;Size=44242;Modify=19990217230400; character-sets
 D> Type=file;Size=1947;Modify=19990209215600; operating-system-names
 S> 226 MLSD completed
 C> MLSD media-types
 S> 150 BINARY connection open for MLSD media-types
 D> Type=cdir;Modify=19990219073522; media-types
 D> Type=cdir;Modify=19990219073522; /iana/assignments/media-types
 D> Type=pdir;Modify=19990219183438; ..
 D> Type=dir;Modify=19990112033045; text
 D> Type=dir;Modify=19990219183442; image
 D> Type=dir;Modify=19990112033216; multipart
 D> Type=dir;Modify=19990112033254; video
 D> Type=file;Size=30249;Modify=19990218032700; media-types
 S> 226 MLSD completed
 C> MLSD character-set-info
 S> 150 BINARY connection open for MLSD character-set-info
 D> Type=cdir;Modify=19990112033515; character-set-info
 D> Type=cdir;Modify=19990112033515; /iana/assignments/character-set-info
 D> Type=pdir;Modify=19990219183438; ..
 D> Type=file;Size=1234;Modify=19980903020400; windows-1251
 D> Type=file;Size=4557;Modify=19980922001400; tis-620
 D> Type=file;Size=801;Modify=19970324130000; ibm775
 D> Type=file;Size=552;Modify=19970320130000; ibm866
 D> Type=file;Size=922;Modify=19960505140000; windows-1258
 S> 226 MLSD completed
 C> MLSD languages
 S> 150 BINARY connection open for MLSD languages
 D> Type=cdir;Modify=19990112033529; languages
 D> Type=cdir;Modify=19990112033529; /iana/assignments/languages
 D> Type=pdir;Modify=19990219183438; ..
 D> Type=file;Size=2391;Modify=19980309130000; default
 D> Type=file;Size=943;Modify=19980309130000; tags
 D> Type=file;Size=870;Modify=19971026130000; navajo

 D> Type=file;Size=699;Modify=19950911140000; no-bok
 S> 226 MLSD completed
 C> PWD
 S> 257 "/iana/assignments" is current directory.

   This example shows some of the IANA maintained files that are
   relevant for this specification in MLSD format.  Note that these
   listings have been edited by deleting many entries, the actual
   listings are much longer.


8.2. A Stress Test of Case (In)dependence


   The following example is intended to make clear some cases where case
   dependent strings are permitted in the MLSx commands, and where case
   independent strings are required.

   Note first that the "MLSD" command, shown here as "MlsD" is case
   independent.  Clients may issue this command in any case, or
   combination of cases, they desire.  This is the case for all FTP
   commands.

 C> MlsD
 S> 150 BINARY connection open for MLSD .
 D> Type=pdir;Modify=19990929011228;Perm=el;Unique=keVO1+ZF4; ..
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+Bd8; FILE2
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+aG8; file3
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+ag8; FILE3
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+bD8; file1
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+bD8; file2
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+Ag8; File3
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+bD8; File1
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+Bd8; File2
 D> Type=file;Size=4096;Modify=19990929011440;Perm=r;Unique=keVO1+bd8; FILE1
 S> 226 MLSD completed

   Next, notice the labels of the facts.  These are also case-
   independent strings; the server-FTP is permitted to return them in
   any case desired.  User-FTP must be prepared to deal with any case,
   though it may do this by mapping the labels to a common case if
   desired.

   Then, notice that there are nine objects of "type" file returned.  In
   a case-independent NVFS these would represent three different file
   names, "file1", "file2", and "file3".  With a case-dependent NVFS all
   nine represent different file names.  Either is possible, server-FTPs
   may implement a case dependent or a case independent NVFS.  User-FTPs
   must allow for case dependent selection of files to manipulate on the
   server.

   Lastly, notice that the value of the "unique" fact is case dependent.
   In the example shown, "file1", "File1", and "file2" all have the same
   "unique" fact value "keVO1+bD8", and thus all represent the same
   underlying file.  On the other hand, "FILE1" has a different "unique"
   fact value ("keVO1+bd8") and hence represents a different file.
   Similarly, "FILE2" and "File2" are two names for the same underlying
   file, whereas "file3", "File3" and "FILE3" all represent different
   underlying files.

   That the approximate sizes ("size" fact) and last modification times
   ("modify" fact) are the same in all cases might be no more than a
   coincidence.

   It is not suggested that the operators of server-FTPs create an NVFS
   that stresses the protocols to this extent; however, both user and
   server implementations must be prepared to deal with such extreme
   examples.


8.3. Example from Another Server


 C> MlsD
 S> 150 File Listing Follows in IMAGE / Binary mode.
 D> type=cdir;modify=19990426150227;perm=el; /MISC
 D> type=pdir;modify=19791231130000;perm=el; /
 D> type=dir;modify=19990426150227;perm=el; CVS
 D> type=dir;modify=19990426150228;perm=el; SRC
 S> 226 Transfer finished successfully.
 C> MlsD src
 S> 150 File Listing Follows in IMAGE / Binary mode.
 D> type=cdir;modify=19990426150228;perm=el; /MISC/src
 D> type=pdir;modify=19990426150227;perm=el; /MISC
 D> type=dir;modify=19990426150228;perm=el; CVS
 D> type=dir;modify=19990426150228;perm=el; INSTALL
 D> type=dir;modify=19990426150230;perm=el; INSTALLI
 D> type=dir;modify=19990426150230;perm=el; TREES
 S> 226 Transfer finished successfully.
 C> MlsD src/install
 S> 150 File Listing Follows in IMAGE / Binary mode.
 D> type=cdir;modify=19990426150228;perm=el; /MISC/src/install
 D> type=pdir;modify=19990426150228;perm=el; /MISC/src
 D> type=file;modify=19990406234304;perm=r;size=20059; BOOTPC.C
 D> type=file;modify=19980401170153;perm=r;size=278; BOOTPC.H
 D> type=file;modify=19990413153736;perm=r;size=54220; BOOTPC.O
 D> type=file;modify=19990223044003;perm=r;size=3389; CDROM.C
 D> type=file;modify=19990413153739;perm=r;size=30192; CDROM.O
 D> type=file;modify=19981119155324;perm=r;size=1055; CHANGELO
 D> type=file;modify=19981204171040;perm=r;size=8297; COMMANDS.C
 D> type=file;modify=19980508041749;perm=r;size=580; COMMANDS.H

                                                 ...
 D> type=file;modify=19990419052351;perm=r;size=54264; URLMETHO.O
 D> type=file;modify=19980218161629;perm=r;size=993; WINDOWS.C
 D> type=file;modify=19970912154859;perm=r;size=146; WINDOWS.H
 D> type=file;modify=19990413153731;perm=r;size=16812; WINDOWS.O
 D> type=file;modify=19990322174959;perm=r;size=129; _CVSIGNO
 D> type=file;modify=19990413153640;perm=r;size=82536; _DEPEND
 S> 226 Transfer finished successfully.
 C> MLst src/install/windows.c
 S> 250-Listing src/install/windows.c
 S>  type=file;perm=r;size=993; /misc/src/install/windows.c
 S> 250 End
 S> ftp> mlst SRC/INSTALL/WINDOWS.C
 C> MLst SRC/INSTALL/WINDOWS.C
 S> 250-Listing SRC/INSTALL/WINDOWS.C
 S>  type=file;perm=r;size=993; /misc/SRC/INSTALL/WINDOWS.C
 S> 250 End

   Note that this server gives fully qualified pathnames for the "pdir"
   and "cdir" entries in MLSD listings.  Also notice that this server
   does, though it is not required to, sort its directory listing
   outputs.  That may be an artifact of the underlying file system
   access mechanisms of course.  Finally notice that the NVFS supported
   by this server, in contrast to the earlier ones, implements its
   pathnames in a case independent manner.  The server seems to return
   files using the case in which they were requested, when the name was
   sent by the client, and otherwise uses an algorithm known only to
   itself to select the case of the names it returns.


8.4. A Server Listing Itself


 C> MLst f
 S> 250-MLST f
 S>  Type=dir;Modify=20000710052229;Unique=AAD/AAAABIA; f
 S> 250 End
 C> CWD f
 S> 250 CWD command successful.
 C> MLSD
 S> 150 Opening ASCII mode data connection for 'MLSD'.
 D> Type=cdir;Unique=AAD/AAAABIA; .
 D> Type=pdir;Unique=AAD/AAAAAAI; ..
 D> Type=file;Size=987;Unique=AAD/AAAABIE; Makefile
 D> Type=file;Size=20148;Unique=AAD/AAAABII; conf.c
 D> Type=file;Size=11111;Unique=AAD/AAAABIM; extern.h
 D> Type=file;Size=38721;Unique=AAD/AAAABIQ; ftpcmd.y
 D> Type=file;Size=17922;Unique=AAD/AAAABIU; ftpd.8
 D> Type=file;Size=60732;Unique=AAD/AAAABIY; ftpd.c
 D> Type=file;Size=3127;Unique=AAD/AAAABIc; logwtmp.c

 D> Type=file;Size=2294;Unique=AAD/AAAABIg; pathnames.h
 D> Type=file;Size=7605;Unique=AAD/AAAABIk; popen.c
 D> Type=file;Size=9951;Unique=AAD/AAAABIo; ftpd.conf.5
 D> Type=file;Size=5023;Unique=AAD/AAAABIs; ftpusers.5
 D> Type=file;Size=3547;Unique=AAD/AAAABIw; logutmp.c
 D> Type=file;Size=2064;Unique=AAD/AAAABI0; version.h
 D> Type=file;Size=20420;Unique=AAD/AAAAAAM; cmds.c
 D> Type=file;Size=15864;Unique=AAD/AAAAAAg; ls.c
 D> Type=file;Size=2898;Unique=AAD/AAAAAAk; ls.h
 D> Type=file;Size=2769;Unique=AAD/AAAAAAo; lsextern.h
 D> Type=file;Size=2042;Unique=AAD/AAAAAAs; stat_flags.h
 D> Type=file;Size=5708;Unique=AAD/AAAAAAw; cmp.c
 D> Type=file;Size=9280;Unique=AAD/AAAAAA0; print.c
 D> Type=file;Size=4657;Unique=AAD/AAAAAA4; stat_flags.c
 D> Type=file;Size=2664;Unique=AAD/AAAAAA8; util.c
 D> Type=file;Size=10383;Unique=AAD/AAAABJ0; ftpd.conf.cat5
 D> Type=file;Size=3631;Unique=AAD/AAAABJ4; ftpusers.cat5
 D> Type=file;Size=17729;Unique=AAD/AAAABJ8; ftpd.cat8
 S> 226 MLSD complete.

   This examples shows yet another server implementation, showing a
   listing of its own source code.  Note that this implementation does
   not include the fully qualified path name in its "cdir" and "pdir"
   entries, nor in the output from "MLST".  Also note that the facts
   requested were modified between the "MLST" and "MLSD" commands,
   though that exchange has not been shown here.


8.5. A Server with a Difference


 C> PASV
 S> 227 Entering Passive Mode (127,0,0,1,255,46)
 C> MLSD
 S> 150 I tink I tee a trisector tree
 D> Type=file;Unique=aaaaafUYqaaa;Perm=rf;Size=15741; x
 D> Type=cdir;Unique=aaaaacUYqaaa;Perm=cpmel; /
 D> Type=file;Unique=aaaaajUYqaaa;Perm=rf;Size=5760; x4
 D> Type=dir;Unique=aaabcaUYqaaa;Perm=elf; sub
 D> Type=file;Unique=aaaaagUYqaaa;Perm=rf;Size=8043; x1
 D> Type=dir;Unique=aaab8aUYqaaa;Perm=cpmelf; files
 D> Type=file;Unique=aaaaahUYqaaa;Perm=rf;Size=4983; x2
 D> Type=file;Unique=aaaaaiUYqaaa;Perm=rf;Size=6854; x3
 S> 226 That's all folks...
 C> CWD sub
 S> 250 CWD command successful.
 C> PWD
 S> 257 "/sub" is current directory.
 C> PASV
 S> 227 Entering Passive Mode (127,0,0,1,255,44)

 C> MLSD
 S> 150 I tink I tee a trisector tree
 D> Type=dir;Unique=aaabceUYqaaa;Perm=elf; dir
 D> Type=file;Unique=aaabcbUYqaaa;Perm=rf;Size=0; y1
 D> Type=file;Unique=aaabccUYqaaa;Perm=rf;Size=0; y2
 D> Type=file;Unique=aaabcdUYqaaa;Perm=rf;Size=0; y3
 D> Type=pdir;Unique=aaaaacUYqaaa;Perm=cpmel; /
 D> Type=pdir;Unique=aaaaacUYqaaa;Perm=cpmel; ..
 D> Type=cdir;Unique=aaabcaUYqaaa;Perm=el; /sub
 S> 226 That's all folks...
 C> PASV
 S> 227 Entering Passive Mode (127,0,0,1,255,42)
 C> MLSD dir
 S> 150 I tink I tee a trisector tree
 D> Type=pdir;Unique=aaabcaUYqaaa;Perm=el; /sub
 D> Type=pdir;Unique=aaabcaUYqaaa;Perm=el; ..
 D> Type=file;Unique=aaab8cUYqaaa;Perm=r;Size=15039; mlst.c
 D> Type=dir;Unique=aaabcfUYqaaa;Perm=el; ect
 D> Type=cdir;Unique=aaabceUYqaaa;Perm=el; dir
 D> Type=cdir;Unique=aaabceUYqaaa;Perm=el; /sub/dir
 D> Type=dir;Unique=aaabchUYqaaa;Perm=el; misc
 D> Type=file;Unique=aaab8bUYqaaa;Perm=r;Size=34589; ftpd.c
 S> 226 That's all folks...
 C> CWD dir/ect
 S> 250 CWD command successful.
 C> PWD
 S> 257 "/sub/dir/ect" is current directory.
 C> PASV
 S> 227 Entering Passive Mode (127,0,0,1,255,40)
 C> MLSD
 S> 150 I tink I tee a trisector tree
 D> Type=dir;Unique=aaabcgUYqaaa;Perm=el; ory
 D> Type=pdir;Unique=aaabceUYqaaa;Perm=el; /sub/dir
 D> Type=pdir;Unique=aaabceUYqaaa;Perm=el; ..
 D> Type=cdir;Unique=aaabcfUYqaaa;Perm=el; /sub/dir/ect
 S> 226 That's all folks...
 C> CWD /files
 S> 250 CWD command successful.
 C> PASV
 S> 227 Entering Passive Mode (127,0,0,1,255,36) 
 C> MLSD
 S> 150 I tink I tee a trisector tree
 D> Type=cdir;Unique=aaab8aUYqaaa;Perm=cpmel; /files
 D> Type=pdir;Unique=aaaaacUYqaaa;Perm=cpmel; /
 D> Type=pdir;Unique=aaaaacUYqaaa;Perm=cpmel; ..
 D> Type=file;Unique=aaab8cUYqaaa;Perm=rf;Size=15039; mlst.c
 D> Type=file;Unique=aaab8bUYqaaa;Perm=rf;Size=34589; ftpd.c
 S> 226 That's all folks...

 C> RNFR mlst.c
 S> 350 File exists, ready for destination name
 C> RNTO list.c
 S> 250 RNTO command successful.
 C> PASV
 S> 227 Entering Passive Mode (127,0,0,1,255,34)
 C> MLSD
 S> 150 I tink I tee a trisector tree
 D> Type=file;Unique=aaab8cUYqaaa;Perm=rf;Size=15039; list.c
 D> Type=pdir;Unique=aaaaacUYqaaa;Perm=cpmel; /
 D> Type=pdir;Unique=aaaaacUYqaaa;Perm=cpmel; ..
 D> Type=file;Unique=aaab8bUYqaaa;Perm=rf;Size=34589; ftpd.c
 D> Type=cdir;Unique=aaab8aUYqaaa;Perm=cpmel; /files
 S> 226 That's all folks...

   The server shown here returns its directory listings in seemingly
   random order, and even seems to modify the order of the directory as
   its contents change -- perhaps the underlying directory structure is
   based upon hashing of some kind.  Note that the "pdir" and "cdir"
   entries are interspersed with other entries in the directory.  Note
   also that this server does not show a "pdir" entry when listing the
   contents of the root directory of the virtual filestore; however, it
   does however include multiple "cdir" and "pdir" entries when it feels
   inclined.  The server also uses obnoxiously "cute" messages.


8.6. FEAT Response for MLSx


   When responding to the FEAT command, a server-FTP process that
   supports MLST, and MLSD, plus internationalization of pathnames, MUST
   indicate that this support exists.  It does this by including a MLST
   feature line.  As well as indicating the basic support, the MLST
   feature line indicates which MLST facts are available from the
   server, and which of those will be returned if no subsequent "OPTS
   MLST" command is sent.

      mlst-feat     = SP "MLST" [SP factlist] CRLF
      factlist      = 1*( factname ["*"] ";" )

   The initial space shown in the mlst-feat response is that required by
   the FEAT command, two spaces are not permitted.  If no factlist is
   given, then the server-FTP process is indicating that it supports
   MLST, but implements no facts.  Only pathnames can be returned.  This
   would be a minimal MLST implementation, and useless for most
   practical purposes.  Where the factlist is present, the factnames
   included indicate the facts supported by the server.  Where the
   optional asterisk appears after a factname, that fact will be
   included in MLST format responses, until an "OPTS MLST" is given to
   alter the list of facts returned.  After that, subsequent FEAT

   commands will return the asterisk to show the facts selected by the
   most recent "OPTS MLST".

   Note that there is no distinct FEAT output for MLSD.  The presence of
   the MLST feature indicates that both MLST and MLSD are supported.


8.6.1. Examples


 C> Feat
 S> 211- Features supported
 S>  REST STREAM
 S>  MDTM
 S>  SIZE
 S>  TVFS
 S>  UTF8
 S>  MLST Type*;Size*;Modify*;Perm*;Unique*;UNIX.mode;UNIX.chgd;X.hidden;
 S> 211 End

   Aside from some features irrelevant here, this server indicates that
   it supports MLST including several, but not all, standard facts, all
   of which it will send by default.  It also supports two OS dependent
   facts, and one locally defined fact.  The latter three must be
   requested expressly by the client for this server to supply them.

 C> Feat
 S> 211-Extensions supported:
 S>  CLNT
 S>  MDTM
 S>  MLST type*;size*;modify*;UNIX.mode*;UNIX.owner;UNIX.group;unique;
 S>  PASV
 S>  REST STREAM
 S>  SIZE
 S>  TVFS
 S>  Compliance Level: 19981201 (IETF mlst-05)
 S> 211 End.

   Again, in addition to some irrelevant features here, this server
   indicates that it supports MLST, four of the standard facts, one of
   which ("unique") is not enabled by default, and several OS dependent
   facts, one of which is provided by the server by default.  This
   server actually supported more OS dependent facts.  Others were
   deleted for the purposes of this document to comply with document
   formatting restrictions.

 C> FEAT
 S> 211-Features supported
 S>  MDTM
 S>  MLST Type*;Size*;Modify*;Perm;Unique*;
 S>  REST STREAM
 S>  SIZE
 S>  TVFS
 S> 211 End

   This server has wisely chosen not to implement any OS dependent
   facts.  At the time of writing this document, no such facts have been
   defined (using the mechanisms of section 10.1) so rational support
   for them would be difficult at best.  All but one of the facts
   supported by this server are enabled by default.


8.7. OPTS Parameters for MLST


   For the MLSx commands, the Client-FTP may specify a list of facts it
   wishes to be returned in all subsequent MLSx commands until another
   OPTS MLST command is sent.  The format is specified by:

      mlst-opts     = "OPTS" SP "MLST"
                      [SP 1*( factname ";" )]

   By sending the "OPTS MLST" command, the client requests the server to
   include only the facts listed as arguments to the command in
   subsequent output from MLSx commands.  Facts not included in the
   "OPTS MLST" command MUST NOT be returned by the server.  Facts that
   are included should be returned for each entry returned from the MLSx
   command where they meaningfully apply.  Facts requested that are not
   supported, or that are inappropriate to the file or directory being
   listed should simply be omitted from the MLSx output.  This is not an
   error.  Note that where no factname arguments are present, the client
   is requesting that only the file names be returned.  In this case,
   and in any other case where no facts are included in the result, the
   space that separates the fact names and their values from the file
   name is still required.  That is, the first character of the output
   line will be a space, (or two characters will be spaces when the line
   is returned over the control connection) and the file name will start
   immediately thereafter.

   Clients should note that generating values for some facts can be
   possible, but very expensive, for some servers.  It is generally
   acceptable to retrieve any of the facts that the server offers as its
   default set before any "OPTS MLST" command has been given, however
   clients should use particular caution before requesting any facts not
   in that set.  That is, while other facts may be available from the
   server, clients should refrain from requesting such facts unless

   there is a particular operational requirement for that particular
   information, which ought be more significant than perhaps simply
   improving the information displayed to an end user.

   Note, there is no "OPTS MLSD" command, the fact names set with the
   "OPTS MLST" command apply to both MLST and MLSD commands.

   Servers are not required to accept "OPTS MLST" commands before
   authentication of the user-PI, but may choose to permit them.


8.7.1. OPTS MLST Response


   The "response-message" from [6] to a successful OPTS MLST command has
   the following syntax.

      mlst-opt-resp = "MLST OPTS" [SP 1*( factname ";" )]

   This defines the "response-message" as used in the "opts-good"
   message in RFC 2389prop [6].

   The facts named in the response are those that the server will now
   include in MLST (and MLSD) response, after the processing of the
   "OPTS MLST" command.  Any facts from the request not supported by the
   server will be omitted from this response message.  If no facts will
   be included, the list of facts will be empty.  Note that the list of
   facts returned will be the same as those marked by a trailing
   asterisk ("*") in a subsequent FEAT command response.  There is no
   requirement that the order of the facts returned be the same as that
   in which they were requested, or that in which they will be listed in
   a FEAT command response, or that in which facts are returned in MLST
   responses.  The fixed string "MLST OPTS" in the response may be
   returned in any case, or mixture of cases.


8.7.2. Examples


 C> Feat
 S> 211- Features supported
 S>  MLST Type*;Size;Modify*;Perm;Unique;UNIX.mode;UNIX.chgd;X.hidden;
 S> 211 End
 C> OptS Mlst Type;UNIX.mode;Perm;
 S> 200 MLST OPTS Type;Perm;UNIX.mode;
 C> Feat
 S> 211- Features supported
 S>  MLST Type*;Size;Modify;Perm*;Unique;UNIX.mode*;UNIX.chgd;X.hidden;
 S> 211 End
 C> opts MLst lang;type;charset;create;
 S> 200 MLST OPTS Type;
 C> Feat

 S> 211- Features supported
 S>  MLST Type*;Size;Modify;Perm;Unique;UNIX.mode;UNIX.chgd;X.hidden;
 S> 211 End
 C> OPTS mlst size;frogs;
 S> 200 MLST OPTS Size;
 C> Feat
 S> 211- Features supported
 S>  MLST Type;Size*;Modify;Perm;Unique;UNIX.mode;UNIX.chgd;X.hidden;
 S> 211 End
 C> opts MLst unique type;
 S> 501 Invalid MLST options
 C> Feat
 S> 211- Features supported
 S>  MLST Type;Size*;Modify;Perm;Unique;UNIX.mode;UNIX.chgd;X.hidden;
 S> 211 End

   For the purposes of this example, features other than MLST have been
   deleted from the output to avoid clutter.  The example shows the
   initial default feature output for MLST.  The facts requested are
   then changed by the client.  The first change shows facts that are
   available from the server being selected.  Subsequent FEAT output
   shows the altered features as being returned.  The client then
   attempts to select some standard features that the server does not
   support.  This is not an error, however the server simply ignores the
   requests for unsupported features, as the FEAT output that follows
   shows.  Then, the client attempts to request a non-standard, and
   unsupported, feature.  The server ignores that, and selects only the
   supported features requested.  Lastly, the client sends a request
   containing a syntax error (spaces cannot appear in the factlist.)
   The server-FTP sends an error response and completely ignores the
   request, leaving the fact set selected as it had been previously.

   Note that in all cases, except the error response, the response lists
   the facts that have been selected.

 C> Feat
 S> 211- Features supported
 S>  MLST Type*;Size*;Modify*;Perm*;Unique*;UNIX.mode;UNIX.chgd;X.hidden;
 S> 211 End
 C> Opts MLST
 S> 200 MLST OPTS
 C> Feat
 S> 211- Features supported
 S>  MLST Type;Size;Modify;Perm;Unique;UNIX.mode;UNIX.chgd;X.hidden;
 S> 211 End
 C> MLst tmp
 S> 250- Listing tmp
 S>   /tmp

 S> 250 End
 C> OPTS mlst unique;size;
 S> 200 MLST OPTS Size;Unique;
 C>  MLst tmp
 S> 250- Listing tmp
 S>  Unique=keVO1+YZ5; /tmp
 S> 250 End
 C> OPTS mlst unique;type;modify;
 S> 200 MLST OPTS Type;Modify;Unique;
 C> MLst tmp
 S> 250- Listing tmp
 S>  Type=dir;Modify=19990930152225;Unique=keVO1+YZ5; /tmp
 S> 250 End
 C> OPTS mlst fish;cakes;
 S> 200 MLST OPTS
 C> MLst tmp
 S> 250- Listing tmp
 S>   /tmp
 S> 250 End
 C> OptS Mlst Modify;Unique;
 S> 200 MLST OPTS Modify;Unique;
 C> MLst tmp
 S> 250- Listing tmp
 S>  Modify=19990930152225;Unique=keVO1+YZ5; /tmp
 S> 250 End
 C> opts MLst fish cakes;
 S> 501 Invalid MLST options
 C> MLst tmp
 S> 250- Listing tmp
 S>  Modify=19990930152225;Unique=keVO1+YZ5; /tmp
 S> 250 End

   This example shows the effect of changing the facts requested upon
   subsequent MLST commands.  Notice that a syntax error leaves the set
   of selected facts unchanged.  Also notice exactly two spaces
   preceding the pathname when no facts were selected, either
   deliberately, or because none of the facts requested were available.



Google
Web
RFC-Ref