2.3a:- Makefile:
         - Changed some sentences that looked like English into real English
         - Made CGIDIR relative to HTTPDIR
         - Made the "No user configurable values after this line" sentence
           more clear for the reader by putting a box around it
         - Changed dependencies
         - Automatically moves xs-counter.data from cgi-bin to logs during
           an install
     - README:
         - Changed the version number
         - Added the note about xs-counter.data
     - README.freebsd:
         - Added the note about newer versions of FreeBSD
     - README.linux:
         - Added more specific text about nobody's UID and nogroup's GID
     - THANKS:
         - Changed some sentences to look more like English
         - Added Jean-Pierre Deckers to the list
     - TODO:
         - Removed 'split httpd.c up into more files'
     - autodetect:
         - Now autodetects echo itself
         - Now autodetects PATH_* variables
     - cgi.c:
         - skipspaces() now also skips tabs
         - child is now a global variables (for time_is_up())
         - Added time_is_up() to kill a CGI-bin child when the time is up
         - Changed the detection of nph- and nid-
         - Children are now setsid()'d or setpgrp()'d
         - Changed header parsing: spaces are now accepted before the first
           word on a sentences (thanks to Mart Rentmeester for reporting it)
     - clearxs.c:
         - Changed the -t option into -T (a dangerous option)
     - config.h:
         - Updated for this version
     - convert.c:
         - Added this file (split path.c into path.c and convert.c)
     - convert.h:
         - Added this file (split path.h into path.h and convert.h)
     - Updated the documentation
     - error.c:
         - Added support for the UNAUTHORIZED error code
         - Added a check for /users.html (does mention it if you don't
           have it)
         - Use the environment variable HTTPD_ROOT is its there
     - extra.c:
         - Typecasted the malloc()s
     - getopt.h:
         - Include system's getopt.h if it's there
     - gfxcount.c:
         - Added exit() to the code that says the graphical counter is not
           available
     - httpd.c:
         - Moved a whole lot of routines to methods.c
         - Moved a whole lot of other stuff to methods.c
         - Made a lot of routines external (for methods.o)
         - Made the PID file a variable
         - check_auth() now sets REMOTE_USER and REMOTE_PASSWORD in the
           environment for use in CGI binaries
         - Added the UNAUTHORIZED error code for server_error()
         - Added more setprocname()'s
         - REMOTE_HOST is now only set if the remote host has a real name
           (according to the CGI/1.1 specification)
         - Now saves its command line parameters in the PID file
         - Added checks for faulty Linux /etc/passwd and /etc/group
     - httpd.h:
         - Bumped the version
         - Changed to accomodate methods.c
     - httpdc.c:
         - Added this program to control the httpd easily
     - icons directory:
         - Added this directory with some nice colour icons for xsindex
     - methods.c:
         - Added this file (split httpd.c into httpd.c and methods.c)
     - methods.h:
         - Added this file (split httpd.h into httpd.h and methods.h)
     - path.c:
         - Split this file into path.c and convert.c
     - path.h:
         - Split this file into path.h and convert.h
     - setenv.c:
         - Added declaration of environ if needed
         - Typecasted the malloc()s
     - xschpass.c:
         - Made the form preformatted text for better appearance
     - xsindex.c:
         - Added this program which makes indexes of directories

2.2a:- cgi.c:
         - Added the CGI nid- feature
     - httpd.c:
         - Added the .xsuid feature
         - Added setvbuf in open_logs; it was buffering the output, which does
           not "guarantee" one write() per flush
     - procname.c:
         - Made a typo in setprocname() for HAVE_PSTAT_H

2.2: - Added README.freebsd and README.linux
     - Updated the documentation
         - The httpd.1 file now covers all features of the WWW server
         - The *.html and *.txt are now up to date
     - autodetect:
         - Added NEED_DECL_ENVIRON
         - Added some *.h files
         - Some systems do not like echo -n, made it optional
         - Hopefully fixed the arguments to tr
     - cgi.c:
         - Added the possibility of protecting CGI binaries with the
           standard authentication method
         - Added logging of the amount of CGI output in the access_log
     - config.h.generic:
         - Added NEED_DECL_ENVIRON
         - Added a check for sys/pstat.h (for procname.c)
         - Removed the check for alloca.h; I don't use alloca() any more
         - Added macros for seteuid() and setegid() in case somebody doesn't
           have them; the programs will use setreuid() and setregid() instead
     - httpd.h:
         - Bumped version number
     - httpd.c:
         - The bcopy() in uudecode() was giving a warning on some systems
           where bcopy takes char *'s instead of void *'s; added a typecast
         - Added a function server_error() which tries to find a CGI binary
           that will handle errors
         - Added a Last-modified HTTP header
         - Fixed path decoding
         - Made string operations a lot more efficient
     - httpd.h:
         - Added a prototype for server_error()
     - setenv.c:
         - The bcopy() in setenv() was giving warnings on some systems
           where bcopy takes char *'s instead of void *'s; added typecasts
     - procname.c:
         - Copied some code from sendmail by Eric Allman so XS-HTTPD can
           set the process title on systems other than FreeBSD
     - procname.h:
         - Added initsetprocname() prototype
     - ssi.c:
         - Made the counter code more efficient
         - Added an SSI for an easy graphics counter
     - extra.h:
         - Forgot the declaration of strerror()
     - error.c:
         - Added this utility that intercepts error messages and tries to
           help the remote user as much as possible
     - THANKS:
         - Added this file to the distribution
     - gfxcount.c:
         - Added this file
     - fonts/*:
         - Added two default fonts

2.1: - Updated the documentation
     - Makefile:
         - Changed the CFLAGS default (removed -m486)
         - Added an inference rules for .c files to .o files
         - Removed old .c to .o method
         - Made a typo in the chmod statement in the install rule
     - README:
         - Reformatted the file
     - COPYRIGHT:
         - Reformatted the file
     - CHANGES:
         - Added this file to the distribution
     - autodetect:
         - Restructured
         - Added a function that checks if something will compile
           without errors, instead of putting that function in the code
           many times
     - cgi.c:
         - Forgot the check for NOFORWARDS
         - Removed the CONTENT_TYPE setenv; this is no longer necessary
           because httpd.c reads it from the HTTP headers now
         - It is now okay to place CGI binaries in subdirectories
         - Fixed a bug in Location handling (forgot a newline)
         - Removed unnecessary alarm() calls
         - The routine do_script() now restores the alarm value for
           more realistic timeouts
         - Not all systems seem to support fflush(NULL), changed it to
           fflush(stdout)
     - cgi.h:
         - Forgot the check for NOFORWARDS
     - compress.methods:
         - Added explanation about filters
     - config.h.generic:
         - Changed _PATH_TMP into TEMPORARYPATH because of conflicts with
           system header files (it is not possible to put an #ifdef around
           it because config.h gets included before anything else)
         - Removed the check for memmove()
         - Added check for bcopy() and bzero() instead
         - Added a check for setsid() versus setpgrp()
         - Changed _PATH_DEVNULL into BITBUCKETNAME because of conflicts
           with system header files
     - err.c:
         - warn() acted like warnx()
         - wrong errno was used (forgot to save it)
     - err.h:
         - Forgot the check for NOFORWARDS
     - extra.c:
         - Removed const from function match_list() (kludge)
         - Changed semantics of mysleep(); it now returns whether it
           was able to wait for the entire period
     - extra.h:
         - Forgot the check for NOFORWARDS
         - Reflected const change from extra.c
         - Reflected semantics change of mysleep() from extra.c
     - httpd.c:
         - Gave the variable in setcurrenttime() a more sensible name
         - Made loadmimetypes() and loadcompresstypes() faster
         - Made the hexdigits in the hexdigit() routine better
         - Rewrote the decode() routine; it used to have a seperate
           buffer in which it decoded the string and then copied to
           the originals buffer (haha!)
         - General cleanup of uudecode()
         - Removed unnecessary alarm() calls in senduncompressed()
         - Changed _PATH_TMP in sendcompressed() to TEMPORARYPATH
           (also changed in config.h.generic)
         - Changed _PATH_DEVNULL in filedescrs() to BITBUCKETNAME
           (also changed in config.h.generic)
         - Changed set_signals() so that all handlers get installed
           via sigaction(). Specifically, I wanted SIGCHLD to interrupt
           the current system call.
         - Changed detach() to use HAVE_SETSID; I used something called
           NOHAVE_SETSID which I never even initialized... (?)
         - Changed sendcompressed() to set the child's process group
           so that all children can be killed in one call to killpg()
         - Removed some unnecessary alarm() calls from check_auth()
         - Added an alarm() call to do_get()
         - Changed .redir file "chopping" routine (faster)
         - Changed authentication "chopping" routine (faster)
         - Changed memmove() into bcopy()
         - Changed version handling in process_request(); it now uses
           either HTTP/0.9 or HTTP/1.0, not just any version
         - Changed "chopping" routine in process_request() (faster)
         - Changed the "waiting for children to die" loop in
           standalone_main(); it is now faster
         - Cleaned up parameters to setvbuf in standalone_main()
         - Moved setenv() of REMOTE_HOST a little
         - Changed open_logs() for better standard error redirection
         - Added a few const's here and there
         - Now supports passing arguments to documents; it places any
           text after a ? in the environment variable DOCUMENT_ARGUMENTS
           which is used in ssi.c, but can also be used in CGI binaries
           called from that page
         - Not all systems seem to support fflush(NULL), changed it to
           fflush(stdout)
     - httpd.h:
         - Changed the version number
         - Forgot the NOFORWARDS check
     - imagemap.c:
         - Forgot the </BODY></HTML> in servererr()
     - local.c:
         - Forgot the NOFORWARDS check
     - local.h:
         - Forgot the NOFORWARDS check
     - path.c:
         - Forgot to check the result of transform_user_dir()
     - path.h:
         - Forgot the NOFORWARDS check
     - procname.h:
         - Forgot the NOFORWARDS check
     - setenv.c:
         - Still used memmove instead of bcopy
         - Forgot the NOFORWARDS check
     - setenv.h:
         - Forgot the NOFORWARDS check
     - ssi.c:
         - Removed a lot of consts; they were kind of const, but not really.
           I hate cheating with type casts.
         - Removed a redundant alarm() call in sendwithdirectives_internal(),
           which throws away two setitimer systemcalls per line of HTML page!
         - Speeded up finding directives in parsedirectives()
         - Changed 0644 filemodes into POSIX defines
         - Speeded up sendwithdirectives_internal() by removing a lot of
           fflush() calls
         - Added a new #if directive subtype: argument. This can be used
           to evaluate arguments given to the page
     - ssi.h:
         - Forgot the damn NOFORWARDS again
     - xschpass.c:
         - Made some alarms larger
         - Still used memmove() instead of bcopy()
     - xscrypt.h:
         - Forgot NOFORWARDS...
     - xspasswd.c:
         - Not all systems seem to support fflush(NULL); changed it to
           fflush(stdout)


2.0: - Released the daemon for the first time
     - Major rewrite


1.0: - Never released, just a startup period
