-------------------------------------------------------------------------------
Changes in version 1.42

- Fixed bug in reporting an error in closing the sending socket.

- Fixed bug in reporting an error to list a single entry.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.41

- Fix a one-off buffer overrun in ASCII conversion in the STOR command.

- Fix resetting the output buffer between listings.

- Added a $CONNECT_TIMEOUT setting to set timeouts on data connections.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.40

- File transfer handling has been completely rewritten to handle
  interrupts on the command channel.  Closing the command channel or
  sending another command will interrupt any data transfer in progress.

- Fixed a longstanding bug in the handling of $MESSAGEFILE

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.30

- Switched to the CVM v2 client library.

- Added a $AUTH_ATTEMPTS control to twoftpd-auth to limit the number of
  authentication attempts per session.

- Rewrote the directory listing code to fix listing files with special
  characters in their names.

- Added a transfer rate (bytes/sec) indicator to transfer logs.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.21

- Added a fake listing routine to twoftpd-drop, to avoid errors on GUI
  clients that require LIST or NLST.

- Fixed a compile failure on FreeBSD in the newer MDTM command.
  Thanks Sergei Kolobov.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.20

- Modified the backends (twoftpd-auth and twoftpd-xfer) to show a 220
  banner if the front end authenticated, and 230 if not.  This fixes
  problems some FTP clients have when running twoftpd-anon after
  authentication.

- Added twoftpd-drop, a write-only FTP server.

- Added twoftpd-switch, a tool to choose between twoftpd-anon,
  twoftpd-drop, and twoftpd-xfer based on the value of $SHELL,
  $SHELL_READONLY, and $SHELL_WRITEONLY.

- Make sure to open only regular files.

- Added a MDTM command to the xfer backend that can set timestamps
  (instead of just retrieving them).

- Fixed bug exposed by Mozilla which tries to retrieve directories
  before listing them.

- Eliminated the bogus APPE-after-REST test.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.17

- Fixed a bug where paths starting with "/." would not be omitted when
  nodotfiles was set.
- Check the return value from *buf_close functions.
- Fixed a minor (but annoying) typo in listing permissions of sticky
  files.
- Path permission failures (no dot files / lock home) now produce a
  sensible system error.
- Fixed a bug where listing "/foo/*" would not include the "/foo/"
  prefix in the resulting names.
- Updated for bglibs version 1.006

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.16

- Added a port-20 socket hack, based partly on code contributed by
  Wejn.
- Fixed problems with handling interrupted system calls (strace would
  kill twoftpd).
- Converted to use bglibs.
- Added support for restarting uploads with REST.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.15

- Remember to uncork the socket before closing it.

- Fixed a bug in twoftpd-anon-conf -- getpwnam returns the same static
  struct each time it's called, but I used it in two different ways.

- Fixed a minor bug in CWD command to make it possible to cd into
  execute-only directories.

- Fixed handling when doing NLST against non-existant files.

- When making/accepting connections, abort if stdin becomes readable
  (because of additional command or hangup).

- Added support for handling supplemental group IDs.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.14

- Fixed a bug in the string sort implementation that caused listings to
  leak memory.

- Fixed up PASV connection mode to only show the 150 response if the
  connection does not fail.

- Some other minor fixes to socket handling and response messages.

- Added a work around for broken firewalls that rewrite certain commands
  (specifically PORT) with two CR characters before the final LF.

- Fixed missing socket library for SysV (ie Solaris) systems.

- Strip trailing slashes, which confuse at least the "lock $HOME" mode,
  from the home path.

- Use corked (Linux) or no-push (BSD) writes to improve transfer
  efficiency.

- Set SO_LINGER on outbound sockets (LIST/RETR) to prevent the success
  message from being sent on the network before the data is completely
  sent.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.13

- Bugfix: listing "." when CWD is "/" would fail.

- Include system error message in STAT and MDTM.

- Print out an error message when the session or command times out,
  instead of just silently dropping the connection.

- Modified the PASV response to work around yet more broken clients.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.12

- Now uses the CVM 0.10 (protocol 1) API for authentication.  This means
  you MUST use modules from CVM 0.10 or later with this version.

- Many error messages now include the system error message (like "File
  or path not found") that caused the error.

- Added a simple, limited LIST/NLST option parser, to provide
  compatibility with broken clients that like to send commands like
  "NLST -alL".

- Added authentication and session timeout limits.

- SITE commands are no longer output twice in the logs.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.11

- Fixed a nasty bug (guaranteed corruption) with retrieving files larger
  than 4KB in ASCII mode.

- Fixed up the response code for MKD from 250 to 257.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.10

- Fixed a bug in outbound (PORT mode) connection -- it wasn't binding to
  the local IP, causing problems between servers with multiple IPs and
  firewalls.
- Modified the PASV response to work around FTP client bugs.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.09

- Fixed yet another listing bug -- group names that were not exactly 8
  characters long were either truncated to 8 characters or padded with
  garbage.  Thanks Dan Peterson.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.08

- Fixed yet another one-off bug in listed filenames that resulted in the
  leading character being chopped off when CWD is "/".

- Previous versions of twoftpd would drop all dotfiles from listings.
  This version makes that behavior optional, as well as also disallowing
  all file access to dotfiles when they are hidden.

- Modified how emulated or "soft" chroot mode is enabled.  Previously it
  was enabled by setting the first character of $CHROOT to "e".  Now it
  is enabled by setting $SOFTCHROOT and not setting $CHROOT.

- Added a "lock HOME" backend setting that works similar to the soft
  chroot above.  The CWD will still include $HOME, but all accesses to
  files and paths outside of $HOME will be forbidden.

- Added support for the SITE CHMOD command in the twoftpd-xfer backend,
  as well as a framework for adding other SITE commands.

- Added code to show the true mode of files in long listings rather than
  just "-rw-r--r--" for files and "drwxr-xr-x" for directories.

- Long listings now also show the true group name reported by the CVM
  when the group number on the file is the same as $GID.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.07

- Fixed a bug in handling listing unreadable directory entries that
  would cause listings to be prematurely terminated immediately before
  such an entry.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.06

- Fixed a one-off bug in doing pattern listings that caused all the
  resulting filenames to be prefixed with a '/'.

- Fixed some portability problems.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.05

- Rewrote all file handling operations to enable "emulated" chroot
  behavior.  There are now three modes of operation:
  1. Normal:  CWD appears as $HOME at login.
  2. Hard chroot:  CWD appears as / at login, and is enforced with a chroot.
  3. Emulated chroot:  CWD appears as / at login, with no chroot.
  In all of the cases, there is no chdir done after the server starts.
  This change was done to permit symlinks outside of $HOME.

- Improved the run files and the conf tools to run envdir on each
  connection rather than before tcpserver starts.  This allows the
  configuration variables to be modified without restarting the service.

- Added configuration for logging of responses, and made logging of
  requests optional.  You must now set $LOGREQUESTS if you want to log
  requests and $LOGRESPONSES if you want to log responses.

Development of this version has been sponsored by FutureQuest, Inc.
ossi@FutureQuest.net  http://www.FutureQuest.net/
-------------------------------------------------------------------------------
Changes in version 1.02

- Fixed a couple of bugs in twoftpd-anon-conf.

- Dotfiles should be skipped when listing directories.

- Made the numeric values of some success responses fall in line with
  the specifics of the FTP RFC.  This should hopefully fix many of the
  client failures.

- Added logging code to log requests and responses.

- The backend modules (twoftpd-anon and twoftpd-xfer) will optionally
  print out a banner on startup, and a message file on entering a
  directory.  As well, twoftpd-auth will optionally print out a banner
  before login.
-------------------------------------------------------------------------------
Changes in version 1.01

- Fixed a critical bug in parsing and printing IPs.

- Fixed a bug in handling listing single items.

- Fixed a minor usage documentation bug in the conf programs.
-------------------------------------------------------------------------------
Changes in version 1.00

- Added twoftpd-conf and twoftpd-anon-conf programs.

- Minor internal socket and directory handling changes.
-------------------------------------------------------------------------------
Changes in version 0.92

- Removed the code to handle anonymous logins from the authentication
  front end, in favour of recommending running a seperate anonymous
  server.

- Proper telnet escape translation is now done on output.

- Added some compatibility fixes, especially for glob.

NOTE: there will be no more features added, except for critical omissions,
before the 1.0 release, just bug fixes.
-------------------------------------------------------------------------------
Changes in version 0.91

- Fixed a bug in socket handling that caused timeouts to be set too low.

- Fixed some minor bugs in command-line and environment handling.

- Fixed an iobuf bug that caused opened output files to not be closed on
  errors.

- Added support for the REST command, to speed up resumed transfers.
-------------------------------------------------------------------------------
Changes in version 0.9

- Fixed bug in EOF handling when storing files.

- IP addresses in PORT commands that do not match the remote IP address
  are now rejected.
-------------------------------------------------------------------------------
Changes in version 0.8

- Use glob library to handle wildcard handling.  This means twoftpd can
  now handle listing patterns like "test*/*".

- Apply timeouts on all socket handling routines.

- Dropped use of sendfile on Linux, since it's incompatible with
  handling timeouts on sending or receiving data.
-------------------------------------------------------------------------------
Changes in version 0.7

- Fixed a bug that caused PORT-style connections to fail.
-------------------------------------------------------------------------------
Changes in version 0.6

- Can now handle LIST and NLST on non-directories.

- Should now automatically use sendfile on Linux systems.

- Can now handle ASCII mode file transfers.

- Can now handle RNFR/RNTO file renaming commands.

- Can now handle newlines (octal 012) in paths.
-------------------------------------------------------------------------------
Changes in version 0.5

- TwoFTPd now uses CVM (http://em.ca/~bruceg/cvm/) for authentication.

- twoftpd-auth needs to have the anonymous configuration parameters set
  by environment variables instead of reading them through getpwnam.
-------------------------------------------------------------------------------
Changes in version 0.4

- Now handles timout when making PORT connections.

- Simplified the directory listing format.

- Configured and packaged with SPAC.
-------------------------------------------------------------------------------
Changes in version 0.3

- Now supports anonymous logins with reduced priviledges.

- Now handles both PASV and PORT mode connections.

- Now handles STOR and APPE file upload commands.

- Handles additional verbs: MDTM, RMD, MKD, DELE.

- Times out on PASV connections and receiving commands, as specified
  by $TIMEOUT (defaults to 900 seconds).

- If $CHROOT is set, twoftpd-xfer will chroot on entry.
-------------------------------------------------------------------------------
