BetaFTPD does not fully meet the RFC959 minimum requirements for an FTP server. However, for all practical uses, it should be considered a legal implementation of the FTP protocol, and very close to being fully compliant with RFC959. BetaFTPD is not RFC1123 compliant, but now that renaming is in place, the only thing that is left (I think) before it is, would be refusing Telnet commands. I'm not sure if I will ever do this -- I simply don't see that this could be a problem in today's FTP world. These commands are believed to be fully compliant with RFC959 and RFC1123: PORT, PASV, USER, PASS, CWD, CDUP, QUIT, DELE, PWD, SYST, NOOP, STOR, APPE, ABOR, RNFR, RNTO, MKD, RMD, ALLO, REIN, ACCT, HELP and STAT. These commands are not implemented at all: SMNT, STOU and SITE. The rest of the commands are implemented, but have minor quirks or problems -- see below. Telnet signals are ignored, to the best of my knowledge. BetaFTPD does not speak Telnet, although RFC959 seems to require it. Note that you can still use Telnet to connect to the FTP port (to do a manual debugging session, e.a.) and speak raw FTP, but BetaFTPD does not follow _all_ the rules about, say, Telnet IP and Synch signals. TYPE: The TYPE command is included, but it ignores its argument and always uses binary mode. RFC959 violation, but RFC1123 excuses the missing ASCII mode. (If you enable ASCII mode (--enable-ascii to configure), it's RFC959- and RFC1123-compliant.) STRU: The STRU command is included, but it ignores its argument and always uses file structure (if you really need record structure, mail me; when I'm done laughing, I will consider implementing it). RFC959 violation, but RFC1123 excuses the missing record structure. MODE: The MODE command is included, but it ignores its argument and always uses stream mode (the other two are never used anyway). RFC959 violation, it requires all other modes to be refused. RETR: The RETR command is believed to be compliant with RFC959. (There is no default data port, though -- I'm unsure about this.) LIST/NLST: The LIST and NLST commands ignore some flags (like `-R') given to them. (This is much better than it was before, though.) The RFCs say nothing about directory listing formats anyway, but I guess this is a violation of GNU ls :-) REST: The REST command is implemented, but it doesn't check that its argument really is an integer. REST does not work in ASCII mode. SIZE: The SIZE command (not in any RFC at the moment) does not work in ASCII mode. This is in compliance with the ftpext documents. If we were to enable it in ASCII mode, a possible attacker could just enable ASCII mode, do a SIZE on a big file and thus effectively halt a server for a shorter or longer period of time.