Version 0.0.8 (the Try-to-do-way-too-much-in-one-release Release, originally the Portability Release) 0.0.8 has been through a lot of preview/beta releases, and is a _totally_ different beast from 0.0.7. As a consequence, there have been many minor changes from release to release, which are uninteresting in the big picture and thus has been removed from the list. For a complete list, see the file CHANGES-0.0.8. - Support for not running as root. This implies using its own database of rights and users. Give --enable-nonroot to configure to enable it. Users running BetaFTPD as root are not affected by this support in any way. BetaFTPD is still small with this feature, expect about 1 kB (6%) extra for database routines and hooks in the main code. This is still very experimental. Do not expect this to be better until _at least_ 0.0.9. - Fixed a LOT of bugs, some segfaulting, some minor. - MAJOR performance improvements in almost all areas. One of the main contributors in this area has been Dan Kegel (see the CREDITS file). - Some changes to compile better under Debian GNU/Linux, a debian/ directory, and .deb files available for download. - BetaFTPD will now try to install itself (wow! (not)) in the same directory as the file called `ftpd', if you have that file. - Support for non-Linux platforms! For now, only SunOS/SVR4 and FreeBSD. SunOS just barely works, and FreeBSD lacks sendfile() support. Both are generally untested. - Gave the version its own name, like Samba does :-) - If you have mmap(), BetaFTPD will no longer generate temporary files for directory listings, but generate them in-place in memory. - Completely restructured the internal listing functions, to make them more standards-compliant and smaller. (-l and -F flags now supported, but not -R.) - Make an EXIT command (must be manually enabled -- NEVER use it on a production machine, ANYONE will be able to halt your server!) to stop the server -- useful for profiling, which requires an exit() to generate profile data. (Be aware that gmon.out will be where the server last did a chdir() to, though. In a debugging server, you'll know where that is anyway...) - strip-exec now has a warning. In addition, it gives -D__OPTIMIZE_SIZE__ to keep glibc2 (libc6) from adding some inlines. It also kills -fomit-frame-pointer. So now strip-exec gives a 20 kB executable instead of 21 kB (one extra kB goes to new functionality) :-) - Now strips out any non-ASCII chars from the commands (not any parameters), to fix the ABOR problems. - Documentation changes. - Commented all the functions in cmds.c and ftpd.c, to make it easier to get into the code. - Implemented the APPE, DELE, MKD, RMD, ABOR, REIN, ACCT, HELP and STAT commands. - Added makefile dependencies. - BetaFTPD can now handle non-DES crypt()s, thanks to Beau Kuiper . - ASCII mode added, once again thanks to Beau Kuiper . - Linux sendfile() support (only for mmap()-able machines -- I don't think any machine has sendfile() but not mmap()). Other systems will be added later. - Moved all documentation (except README) into a separate doc/ directory. Added CREDITS file. - The internal ls now can cache the listings (--enable-dcache to configure). Please see the README file for some problems that still exist. This option requires quite a bit of code (1028 bytes compiled, on my system), and some RAM for the directory listings and support structure. I think, however, that the increased performance is worth it. - BetaFTPD can now use poll() if you have it. This removes the old 1024- socket limit, as well as reducing the code size by 496 bytes (on my system). - Added renaming support. (Whee! Almost full RFC1123 compliance!) - Changed all copyright strings to say `1999-2000' (well, it only got to May 2000 before I remembered it...) instead of just `1999'. - A new option, --enable-message, makes the server show info about README files, as well as printing any .message or welcome.msg files that may be available. (This is a quite standard function in other ftpds.) - Made a simple FTP server test suite (not included, since it's really not good enough to live its own life as a standalone product), used in testing. - BetaFTPD now listens on port 21. - Homepage moved to SourceForge (http://betaftpd.sourceforge.net/) - root (or any other user with uid=0) can't FTP anymore. - .spec file (for you RPM junkies :-) ), provided by Sean MacLennan . - Recursive directory listings (`-R' to the internal ls). Version 0.0.7: - Shadow support. (Give --enable-shadow to configure to enable it.) - No longer ships with precompiled binary -- there are way too many configurations to take care of now (shadow, fork, etc.). - Cleans up a connection if no file transfer has been done in 15 minutes. - More checks in configure script. - Made README file a bit nicer. Version 0.0.6: - Fixed PASV bug. - Added upload support! (Give --enable-upload to configure to enable it.) Not 100% tried and tested yet, and requires extra code a lot of places. Amazingly enough, it only gives 700 bytes (uncompressed) extra executable size, and requires about 4 bytes per new connection. - Fixed cosmetic bug in configure script. - All .c files now depend on config.h. - Cleaned up some minor problems in building in a directory different from the source directory. - Added metalab as a mirror site. (The official one is still at my homepage, but I can't offer FTP from there.) - Added LSM entry. - Removed bug that prevented the user from sending _anything_ (including a re-login) if he/she hadn't opened with USER/PASS. - Fixed some problems with compiling on mmap-less machines. Version 0.0.5: - Fixed problem in tarfile (aargh!), it should (forever) unpack into its own directory now. - Made handler_table[] const and static (that means minor advantages in speed and executable size). - Added autoconf support. Still not perfect, but much better than nothing. - Re-added support for mmap-less machines as well. - Now only licensed under GPL v2 (_not_ any later or earlier version). Version 0.0.4: - Fixed problem where Netscape 4.5 would give double slashes after directory names. - Specifying a non-existant user would make the server segfault ;-) - Implemented non-RFC MDTM command. - Changed prompt for anonymous users to "Login OK, send password (your e-mail)." (added 'your' so people won't begin to send their mail passwords :-) - Fixed a bug where anybody could send a fake user name, and access to a random uid. (Don't worry, it was unexploitable -- the server crashed due to another bug...) - Made the command prototypes in cmds.h a single macro, to reduce source size and improve readability (?). - KNOWN-BUGS file added. - Fixed a problem where the server could segfault (due to writing to free()'d memory). - Stripped some sections from the precompiled binary, to reduce size a little more... (Added a script named `strip-exec' which does just that.) - Fixed a problem where doing a `CWD /' followed by a `PWD' would raise some error messages. - Fixed a _possible_ (I couldn't exploit it) problem if a REST was sent, greater than the size of the file downloaded, and libc would have some kind of problem with negative sizes. - Added some #define's in ftp.h for those who don't need xferlogs and/or fullscreen. The precompiled binary is supposed to be _small_, so it disables both. - Removed all alignment from the precompiled binary (hooray! we're back at 15k!) - Compressed precompiled binary with UPX (10k isn't bad...) - Fixed some bugs, problems with NcFTP etc. (This file got lost, and I had to restore from a slightly older backup.) - Started on an RFC-COMPLIANCE file. - Support for nice, full-screen display (not in precompiled binary). - Now uses mmap() instead of read() and write(). - Lots of _real_ testing, in a production environment! That sure fixed a lot of problems :-) Version 0.0.3: - CHANGES file added... - Fixed a bug that prevented lynx and IE (?) from getting dir listings. - Added VERY crude logging (only to /var/log/xferlog for now). It fakes some of the traditional xferlog fields. (Note: this alone was almost 1k) - Accepts "ftp" as well as "anonymous". - NLST command partly implemented (errr...). - Cleaned up some error numbers, shortened some messages. - Added pseudo-commands MODE and STRU. - Can recognize other home dirs than /home/ftp/ for anonymous users. - Made FTP port a #define in ftpd.h. - Ignores information on stdin (libc workaround). - Globbing support! (ie. you can do things like LIST *.dat)