FTP Related Articles > FTP Command and Extension Registry RFC 5797

FTP Command and Extension Registry RFC 5797

1. Introduction

Every version of the FTP specification has added a few new commands, with the early ones summarized in RFC 959. RFC 2389 [RFC2389] established a mechanism for specifying and negotiating extensions to the FTP protocol specified in RFC 959, by means of "FEAT Strings" identifying extensions supported by the FTP server, and sent in response to a "FEAT" command. The number of extensions continues to grow, not all of them supported by FEAT. An IANA registry is established to reduce the likelihood of a conflict of names and the consequent ambiguity and to encourage the sharing of information. This specification establishes that registry.

2. Registry Definition

2.1. Registry Name

The name of this registry is "FTP Commands and Extensions".

2.2. Registry Format

As specified in this RFC, IANA has established a registry for FTP commands and extensions. Registration requests and registry entries should include the following:

  • Command Name - The FTP command, either new or modified, used in the extension or with which the extension is used. Following the long-standing practice to capitalize command names in specification documents for FTP, the command names are entered in all uppercase. For extensions amending the operation of a command, a plus sign ("+") is appended to the command name. However, if an extension affects the overall command parameter handling and/or transaction processing, instead of being bound to one command (or a small number of commands), the string "-N/A-" is entered. It is intended to have the registry entries ordered by ascending ASCII collation order of this column (including the "+" suffix if present).
  • Extension name - The name of the extension. FTP extensions predating RFC 2389 [RFC2389], and some extensions published after it, did not specify a keyword to identify the extension in a FEAT response. Some later specifications established FEAT strings with the respective command names as their keywords. In order to provide for keywords for future specifications in such cases, this document establishes 'placeholder' keywords to reserve reasonable feature names for future standardization. Similarly, placeholder keywords are used for the basic FTP commands specified in RFC 959 [RFC0959] and those of its predecessors that are still in use. These placeholder keywords are placed in the registry for convenience; it is not intended that they be returned in FEAT responses. To compensate for this idiosyncrasy, the column in the registry is entitled "FEAT Code", and to clearly distinguish between the two cases, defined FEAT keywords codes are listed in all uppercase, whereas placeholder keywords (henceforth called "pseudo FEAT codes") are listed in lowercase. Future specifications are allowed to "upgrade" a placeholder to a true keyword unless it is specifically declared 'immutable' below, but otherwise IANA maintains uniqueness of feature names (FEAT codes) based on case- insensitive comparison.
  • Description - A brief description of the extension and, where appropriate, the command.
  • FEAT String - (optional in registration requests to IANA). The string expected to be included in the response to the FEAT command [RFC2389] if the extension is supported. In many cases, the FEAT string required to identify an extension only consists of the "FEAT Code", making this item redundant. Therefore, this item should only be specified if it is intended to register a FEAT string that contains mandatory elements other than the "FEAT Code" itself. Due to space restrictions, and to allow registrants to provide additional information, IANA should present these registration items (if given) in numbered footnotes to the table, not in an additional table column.
  • Command Type - The type (or 'kind') of the command. Section 4.1 of RFC 959 introduced a subdivision of FTP commands into three types: Access control, transfer Parameter {setting}, and Service {execution}. For clarity, and as a service to the user of the registry, this subdivision is extended to all registered FTP commands, using the characteristic initial of the type, 'a', 'p', or 's', respectively, filed in the registry column titled "type"; combinations are allowed, e.g., 'p/s'.
  • Conformance Requirements - The support expectation for the command. RFC 959 specifies mandatory-to-implement commands and optional commands. This classification is carried over to all registered commands, using a column titled "conf" carrying a single character -- either 'm' or 'o', for "mandatory" and "optional", respectively. Similarly, obsoleted or historic entries are left in the registry to avoid conflicts with deployed implementations, and these entries are marked with 'h' (for "historic"). Beyond the initial registrations, Standards Action [RFC5226] is needed to register new "mandatory" entries or to move such entries to "historic".
  • Reference - A reference to an RFC or other definition of the extension and/or to implementations supporting it (see the next section).

2.3. Criteria for Registration

This registry is primarily intended to avoid conflicting uses of the same extension names and command keywords for different purposes, not to demonstrate that an extension is somehow "approved". The "Expert Review" method will be used, but the designated expert is expected to check only that at least one of the two criteria that follow are met.

  1. The extension is documented in a permanent and readily available public specification (this is the same as the "Specification Required" registration policy defined in RFC 5226).
  2. The extension is actually implemented in FTP client and FTP server systems that are generally available (not necessarily either free or unencumbered, but available).

For an extension or command to be marked "mandatory" ('m' in the "conf" column), an IETF Standards Track specification is required. An IESG Standards Action is allowed to direct IANA to change the Conformance Requirements listed for any entry.

2.4. Base FTP Commands

The following commands are part of the base FTP specification [RFC0959] and are listed in the registry with the immutable pseudo FEAT code "base".

Mandatory commands:

ABOR, ACCT, ALLO, APPE, CWD, DELE, HELP, LIST, MODE, NLST, NOOP, PASS, PASV, PORT, QUIT, REIN, REST, RETR, RNFR, RNTO, SITE, STAT, STOR, STRU, TYPE, USER

Optional commands:

CDUP, MKD, PWD, RMD, SMNT, STOU, SYST

Note: STD 3 [RFC1123] clarified and updated the status and implementation requirements of these standard FTP commands, and it contains important complementary information for the following commands:

LIST, NLST, PASV, REST, SITE, STOU

2.5. Obsolete Commands

The following commands were specified as experimental in an extension to an early version of the FTP specification [RFC0775] but later deprecated by RFC 1123 [RFC1123], because Standard FTP [RFC0959] specifies their standard successors. They are listed in the registry with the immutable pseudo FEAT code "hist".

XCUP, XCWD, XMKD, XPWD, XRMD

Implementation note: Deployed FTP clients still make use of the deprecated commands and most FTP servers support them as aliases for the standard commands.

The following commands were specified as part of the "FOOBAR" IPng effort in RFC 1545 [RFC1545] and, later, RFC 1639 [RFC1639] and are now obsolete. They are listed in the registry with the immutable pseudo FEAT code "hist".

LPRT, LPSV

3. Initial Contents of Registry

As a service to users of the registry and the authors of existing specifications, all FTP commands and features published in RFCs after STD 3 [RFC1123] and up to the time of this writing were included in the registry upon creation.

The following pseudo FEAT codes have been assigned, according to Section 2:
base - FTP standard commands [RFC0959]
hist - Historic experimental commands [RFC0775], [RFC1639]
secu - FTP Security Extensions [RFC2228]
feat - FTP Feature Negotiation [RFC2389]
nat6 - FTP Extensions for NAT/IPv6 [RFC2428]

cmdFEAT CodeDescriptionTypeConfRFC#s/References and Notes
ABORbaseAbortsm959
ACCTbaseAccountam959
ADATsecuAuthentication/Security Dataao2228, 2773, 4217
ALLObaseAllocatesm959
APPEbaseAppend (with create)sm959
AUTHsecuAuthentication/Security Mechanismao2228
AUTH+AUTHAuthentication/Security Mechanismao2773, 4217 #2
CCCsecuClear Command Channelao2228
CDUPbaseChange to Parent Directoryao959
CONFsecuConfidentiality Protected Commandao2228
CWDbaseChange Working Directoryam959
DELEbaseDelete Filesm959
ENCsecuPrivacy Protected Commandao2228, 2773, 4217
EPRTnat6Extended Portpo2428
EPSVnat6Extended Passive Modepo2428
FEATfeatFeature Negotiationam #12389
HELPbaseHelpsm959
LANGUTF8Language (for Server Messages)po2640
LISTbaseListsm959, 1123
LPRThistData Port {FOOBAR}ph1545, 1639
LPSVhistPassive Mode {FOOBAR}ph1545, 1639
MDTMMDTMFile Modification Timeso3659
MICsecuIntegrity Protected Commandao2228, 2773, 4217
MKDbaseMake Directoryso959
MLSDMLSTList Directory (for machine)so3659
MLSTMLSTList Single Objectso3659
MODEbaseTransfer Modepm959
NLSTbaseName Listsm959, 1123
NOOPbaseNo-Opsm959
OPTSfeatOptionspm #12389
PASSbasePasswordam959
PASVbasePassive Modepm959, 1123
PBSZsecuProtection Buffer Sizepo2228
PBSZ+PBSZProtection Buffer Sizepo4217
PORTbaseData Portpm959
PROTsecuData Channel Protection Levelpo2228
PROT+PROTData Channel Protection Levelpo4217
PWDbasePrint Directoryso959
QUITbaseLogoutam959
REINbaseReinitializeam959
RESTbaseRestarts/pm959, 1123
REST+RESTRestart (for STREAM mode)s/pm3659 #3
RETRbaseRetrievesm959
RMDbaseRemove Directoryso959
RNFRbaseRename Froms/pm959
RNTObaseRename Fromsm959
SITEbaseSite Parameterssm959, 1123
SIZESIZEFile Sizeso3659
SMNTbaseStructure Mountao959
STATbaseStatussm959
STORbaseStoresm959
STOUbaseStore Uniqueao959, 1123
STRUbaseFile Structurepm959
SYSTbaseSystemso959
TYPEbaseRepresentation Typepm959 #4
USERbaseUser Nameam959
XCUPhist{precursor for CDUP}sh775, 1123
XCWDhist{precursor for CWD}sh775, 1123
XMKDhist{precursor for MKD}sh775, 1123
XPWDhist{precursor for PWD}sh775, 1123
XRMDhist{precursor for RMD}sh775, 1123
-N/A-TVFSTrivial Virtual File Storepo3659

Table 1

Notes:

  • #1 While an IETF Standards Action would be required to make the FEAT mechanism [RFC2389] mandatory, implementation of that extension mechanism is clearly required in conjunction with any extension or feature that depends on it.
  • #2 FEAT String for [RFC4217]: AUTH TLS FEAT String for [RFC2773]: AUTH KEA-SKIPJACK
  • #3 FEAT String: REST STREAM
  • #4 FEAT String: TYPE {semicolon-separated list of supported types}

4. Acknowledgments

Any work to update or extend FTP depends on the base specification in RFC 959. The contributions of its editors, Jon Postel and Joyce Reynolds, are gratefully acknowledged. The option-negotiation mechanism specified in RFC 2389 (and the accumulation of features that followed it) made this registry relevant; the authors of those documents are acknowledged as well.

Barry Leiba and Alexey Melnikov made several suggestions about earlier versions of this document, most of which have been incorporated.

Anthony Bryan spotted a few typographical errors.

Scott Bradner suggested a clarification to the "Expert Review" text.

The authors appreciate the comments and support for this work received from FTP implementers and many IETF participants. Comments from the IESG helped to shape this document and registry to improve its utility.

5. IANA Considerations

IANA has established the registry described in Section 2 using the initial content specified in Section 3 and including the body of Sections 2.4 and 2.5 as explanatory text in the preface of the registry.

New entries should be added to this registry when extensions to FTP are approved or defined in RFCs or when extensions that are already in use and well-documented are identified. In other words, the requirement for registration is a slightly relaxed version of "Specification Required" [RFC5226] with Expert Review. See Section 2.3 for specifics and exceptions.

6. Security Considerations

The creation of this registry provides improved documentation and protection against interoperability problems. It introduces no new security issues.

7. References

7.1. Normative References

[RFC0959] Postel, J. and J. Reynolds, "File Transfer Protocol", STD 9, RFC 959, October 1985.

[RFC2389] Hethmon, P. and R. Elz, "Feature negotiation mechanism for the File Transfer Protocol", RFC 2389, August 1998.

[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an IANA Considerations Section in RFCs", BCP 26, RFC 5226, May 2008.

7.2. Informative References

[RFC0775] Mankins, D., Franklin, D., and A. Owen, "Directory oriented FTP commands", RFC 775, December 1980.

[RFC1123] Braden, R., "Requirements for Internet Hosts - Application and Support", STD 3, RFC 1123, October 1989.

[RFC1545] Piscitello, D., "FTP Operation Over Big Address Records (FOOBAR)", RFC 1545, November 1993.

[RFC1639] Piscitello, D., "FTP Operation Over Big Address Records (FOOBAR)", RFC 1639, June 1994.

[RFC2228] Horowitz, M., "FTP Security Extensions", RFC 2228, October 1997.

[RFC2428] Allman, M., Ostermann, S., and C. Metz, "FTP Extensions for IPv6 and NATs", RFC 2428, September 1998.

[RFC2773] Housley, R. and P. Yee, "Encryption using KEA and SKIPJACK", RFC 2773, February 2000.

[RFC4217] Ford-Hutchinson, P., "Securing FTP with TLS", RFC 4217, October 2005.

Source: RFC 5797

ORDER FTP HOSTING