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
  <ekuiperba@cc.curtin.edu.au>.
- ASCII mode added, once again thanks to Beau Kuiper
  <ekuiperba@cc.curtin.edu.au>.
- 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
  <seanm@netwinder.org>.
- 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)
