mod_facts
File "Facts" Support
The mod_facts module is ProFTPD's module for handling the
MLSD and MLST commands, in support of
RFC 3659. In addition,
the mod_facts module implements the MFF and
MFMT commands defined in:
http://tools.ietf.org/html/draft-somers-ftp-mfxx-04
This module is contained in the mod_facts.c file for
ProFTPD 1.3.x, and is compiled by default.
The most current version of mod_facts can be found in the
ProFTPD source distribution:
http://www.proftpd.org/
<VirtualHost>, <Global>
The FactsAdvertise directive is used to control whether
the mod_facts module advertises its MLST support
via the FEAT command.
By default, the mod_facts module will list MLST
in the FEAT response. FTP clients use this to determine whether
to use the newer MLSD/MLST commands, or the older
LIST/NLST commands. Some FTP clients, though,
will attempt to use the newer commands just as if they were equivalent to
the older commands, including supporting glob/wildcard characters.
Section 2.2.2 of RFC3659, which explicitly states that wildcard characters are
not supported in the MLSD and MLST commands.
Thus, to prevent problems when using such FTP clients with proftpd,
you can disable the advertising of support for those commands using
e.g. the following in your proftpd.conf:
<IfModule mod_facts.c>
FactsAdvertise off
</IfModule>
<VirtualHost>, <Global>
The FactsOptions directive is used to configure various optional
behavior of mod_facts. Note: all of the configured
FactsOptions parameters must appear on the same line in the
configuration; only the first FactsOptions directive that
appears in the configuration is used.
The currently implemented options are:
UseSlink
Use this option to have mod_facts use the broken
"OS.unix=slink" syntax, preferred by FTP clients such as FileZilla, for
indicating symlinks, rather than the more correct "OS.unix=symlink"
syntax. See
Bug#3318 for
a more detailed discussion.
Note that this option first appeared in
proftpd-1.3.4b.
Frequently Asked Questions
Question: Why does
Question: Why does
To work around this issue, you can add the following to your
MLSD list all of the
files in a directory, including the "hidden" files, where the LIST
command does not?
Answer: The MLSD and MLST
commands do not have any notions of "options" like the LIST and
NLST commands do; there is no way for a client, in the request
to list the files in a directory, to ask the server to filter the list of
files somehow. Instead, MLSD contains a list of "facts" for
each file in its list; the client then has to to decide how to filter the
list of files based on those facts. This is why the ListOptions
directive has no influence over the MLSD and MLST
commands.
MLST show the UIDs/GIDs
for listed files, where LIST/NLST show the user/group
names?
Answer: The list of "facts" defined by RFC 3659 does
not include a fact for the stringified version of user/group owner
names, unfortunately. This means that the MLSD/MLST
commands do not have a good way of obtaining the user/group names.
proftpd.conf:
<IfModule mod_facts.c>
FactsAdvertise off
</IfModule>
This tells proftpd to not advertise to the client that it can
support the MLSD/MLST commands. The client will then
usually fall back to using the older LIST command, which
does include the file owner user/group names.