- freedt 0.21
Fix bugs found by Ulf Hrnhammar's audit:
  - off-by-one error in envdir
  - check multiplication hasn't overflowed in iolib
Use id -g instead of C code in mkservice.

- freedt 0.20
Fix format with more than one va argument (for instance, in svstat).

- freedt 0.19
Use va_list rather than va_list * as function argument, to deal with
  architectures like x86-64 where va_list is an array type (Larry Doolittle).

- freedt 0.18
Use a config.h file.
Fix a stupid typo in supervise: F_SETFL for O_NONBLOCK.

- freedt 0.17
Implement fdt_unsetenv() (since Solaris doesn't have unsetenv); reimplement
  fdt_setenv() to work on a copy of the environment (since setenv's behaviour
  isn't defined if you modify environ yourself).
Implement lock_fd() (since Solaris doesn't have flock).
Include some extra headers for Solaris.
Make autoconf detect the available RLIMIT_* declarations.
Make autoconf detect O_FSYNC for FreeBSD (instead of O_SYNC) (Tim Bishop).
Add RLIMIT_SBSIZE and RLIMIT_VMEM limits in softlimit (both on FreeBSD, VMEM on
  Solaris).

- freedt 0.16
Remove almost all the buffered IO stuff from iolib.
Fix ratelimit to not hang if it can't write all its buffered data immediately.
Rename bsetsize() to bsetlength(), add a new internal bsetsize(), and thus
  remove a needless alloc-and-copy from readb.
Make dumblog use O_SYNC instead of fsync().
Make dumblog retry failing write()/close() calls, and be more careful about
  not losing data on error.
Make envdir have the correct file-trimming behaviour. (It's not obvious from
  djb's documentation what you're meant to do with incomplete lines, but it
  seems more useful to treat a file that doesn't contain a \n as just
  containing one line.)
Make envdir correctly replace \0 with \n in variable values.
Simplify anonidentd code considerably.
Improve anonidentd logging.
Remove extraneous space from anonidentd response.

- freedt 0.15
Fix error handling in anonidentd.
Make svscan invoke log services as "supervise x/log".
Rework svscan logic to chdir() less often.
Make iformat/bformat use a format string.
Make bformat buffer the formatted output before writing it.

- freedt 0.14
Fix handling of non-directories in the service dir (JN) and a few
  error-handling bugs in svscan.

- freedt 0.13
Clear the signal mask in supervise before starting the child process.

- freedt 0.12
Remove arbitrary limit on svc's command buffer (JN).

- freedt 0.11
Made svc send commands to supervise in the order they were given (JN).
getopt should return int, not char.
Added version and help options to all programs.
Added -s to setuidgid to make it pick up supplementary groups too
  (suggested by MP).

- freedt 0.10
Fixed typo in waitpid check in supervise (MP).

- freedt 0.9
Mask SIGCHLD except around select() in supervise (MP).
Add some more helper functions to freedt.c.
Update FD flags correctly (MP).
Use FD_CLOEXEC rather than explicit closes, and fix FD leak in supervise
  (MP).
Save errno in signal handlers (MP).

- freedt 0.8
Fix argc check in supervise (reported by Jon Nelson).
Update configure.in for new version of automake.
Made svscan check for the existance of log/, rather than the sticky bit
  being set (Jon Nelson).
Use a self-pipe for signal handling in supervise (Michael Pomraning).
Make kill_child behave more sensibly on error in supervise (Michael
  Pomraning).
Remove superfluous check for root in setuidgid (Michael Pomraning).

- freedt 0.7
Made supervise and svscan close all their file descriptors before execing
  children.
Made supervise not block if the supervise lock for a directory is already
  taken.
Made svscan always sleep for 5 seconds, even if a child dies in the meantime.

- freedt 0.6
Made svscan wait for multiple dead children on SIGCHLD (otherwise if
  multiple supervises died at once some would be zombified).
Made supervise open control fifo in blocking mode (brown paper bag bug) and
  simplified child death logic.

- freedt 0.5
Fixed ratelimit/recordio bug where select didn't stop reading upon the input
  being closed.
Added freedt.o, and changed PROGNAME mechanism to match.
Added _IOLIB_H guards to iolib.h.
Added chroot support to anonidentd.
Moved servetcp out into a seperate package (onenetd).
Considerably simplified supervise logic.
Removed socket-specific code from iolib.
autoconfiscated.

- freedt 0.4 (30th November 2001)
Added ratelimit and recordio.

- freedt 0.3 (29th November 2001)
Made svc deal correctly with multiple arguments.
Tidied up freedt.h a bit.
Added die2(); made error messages include the service name where possible.
Made supervise update the status file upon -u and -o (previously svstat would
  show the service as still being down).
Made svstat display the downtime and normal status of down services.

- freedt 0.2 (23rd September 2001)
Ported to iolib instead of libc.
Added dumblog.
Added more djb-like programs to README.
Added servetcp.
Added anonidentd.

- freedt 0.1 (17th June 2001)
Initial version.

