Version 1.0 -- Dec 91.  Original source created.

Version 2.0 -- Dec 91.  Added man pages.  Server bug fix.  In 1.0, files
	       in a directory that is protected from deletion can still
	       be written over. In 2.0, it is prohibited as well. 

Version 2.1 --	Jan 1, 92.

		1) The maximum length of a name in pre-2.1 server is
		   both limited by the 1k-byte udp packet size and, in
		   some cases more severely, by the OS it is running in.
		   On some systems, the OS imposes a limite of 14 chars.
		   For those systems, the server can now be made to hash
		   long names into short ones.  The effect is transparent
		   to the clients except when two long names gets hashed
		   into the same value.  In that case, they will refer
		   to the same file during downloading, and they will
		   displace each others during uploading.

		2) Since directories, unlike files, have undisputable
		   ownership, removal of a directory owned by a client
		   should depends only on the ownership of the directory
		   itself, and not on that of its parent directory.  In
		   pre-2.1 server, the client must have delete permission
		   to the parent directory before it is allowed to delete
		   the subdirectory.  In 2.1, the permission is not needed.

Version 2.2 --	Feb 15, 92.

		1) The fput and fgetcmd utilities will now accept a list of
		   files from its standward input.  See their man pages for
		   this expanded usage.  This is useful if you don't want
		   file names to show on 'ps' output.

		2) The retransmit timer for client code has been changed
		   to use an adaptive algorithm.  In pre-2.2 versions of
		   FSP, clients will retransmit if it has not received a
		   response from the server after a delay of 3 seconds.
		   In version-2.2, two separate delays are used.  The
		   "busy" delay is used when waiting for a reply for the
		   first try and the second try.  Any time a second try
		   is necessary, the delay is increased by 50%.  Every
		   first try brings the delay 12.5% closer to the initial
		   delay setting (3 seconds by default, settable by the
		   FSP_DELAY variable).  For the third try and beyond,
		   the "idle" delay is used.  For each try, the delay is
		   doubled.

		3) Makes available FSP request code space 0x80 - 0xff for
		   future user extensions.  Each such extension will begin
		   with a code byte in that range, and followed by a control
		   block, which is likely to be different from the existing
		   one.  The basic operations of FSP will not require the
		   use of such extensions.

		Note:  2.2 does not involve changes to the server itself.
		       The server is been checked out and added to by a
		       few people on the net.  I will wait until the
		       modifications stabilize before I consolidate them.

Version 2.3 -- Mar 9, 92

		1) The bsd_src/glob.c file has a bug in blkfree function
		   in that it tries to free something that is actually
		   on the stack of the glob function. The last call to
		   free has been commented out to fix the bug. 

		2) The fspd has a bug whoes only visible manifestation
		   is the that protection can't be changed.  The fix has
		   required a moderate amount of code change in fspd.

		3) .FSP_NO_DEL and .FSP_NO_ADD mechanism has been replaced
		   by .FSP_OK_DEL and .FSP_OK_ADD mechanism.  Thus by
		   default, a directory is no delete and no add.

		4) fprocmd is modified to relax option checking, allowing
		   arbitrary option characters be passed to the fsp server.

		5) A fls bug is fixed so that a "fls /" in a directory other
		   than the root directory will not cause an error.

		6) A -DDIRENT switch is added in Makefile to help support
		   those machines that does not have /usr/include/dirent.h.

Version 2.3a -- March 20, 1992

		1) In a few places, non-critical errors of the form:
		       if(errno = EINTR) ....
		   was made.  It obviously should have been == instead.
		   The problem is fixed.

		2) In the previous versions there is a potential problem
		   such that if the first reply packet is dropped or is
		   messed up, making a retransmit necessary, fspd will
		   make the client utility wait for a 1 minute timeout.
		   A potential loop hole for this happening has been
		   closed by modifying server_lib.c where the packet key
		   is checked. 

Version 2.4 -- March 27, 1992

		1) fgrab/fgrabcmd client utility is added.  It is like
		   fget except it also deletes the named files in such a
		   way that if there are multiple fgrabs for the same
		   file, only one will succeed. One bug/mis-feature of
		   fgrab is that when fgrab is terminated abnormally, the
		   file is not restored. This command is useful for things
		   like sharing bone files for modified versions of nethack. 

		2) FSP now allows multiple client programs to run at the
		   same time if one of the three multiplexing mechanisms
		   are chosen during compile time.  It is likely that at
		   least one of them will work for your system.  The
		   multiplexing is done at the client side, and does not
		   allow the client machine to issue request messages at
		   a higher rate compared to the previous versions.  The
		   FSP_LOCALPORT variable is no longer needed.  However,
		   if used, it will force serialization of client programs,
		   which might be desireable if none of the multiplexing
		   mechanisms are suitable for your machine.  In order to
		   accommodate this change, the server code has been
		   changed to store temporary upload files with a different
		   name from the previous version.  The names now have to
		   identify sender's port as well as sender's internet id.
		   Change is necessary to keep it under 14-character limit
		   of some OS.

		3) Progress report mechanism enabled by FSP_TRACE variable
		   now try to update the kbyte display more promptly.

		4) fcat/fcatcmd will now turn off FSP_TRACE during its
		   file transfer if its stdout is a tty.

Version 2.5 -- April 8, 1992

		1) A bug introduced during the last release --- fspd will
		   not timeout and exit when running under inetd mode.
		   This bug is now fixed.  It was introduced because it
		   is more convienent at one time for it not to exit when
		   it is still being debugged.  The patch to stop it from
		   exiting was not removed before release time. 

		2) A very rarely seen bug in some OS is circumvented. UDP
		   packet's headers contain a checksum field.  If the
		   checksum option is disabled, the OS will set the
		   checksum field to 0 before sending, and will not check
		   the checksum field when message is received. If the
		   option is enabled, the OS will stuff the checksum into
		   the checksum field.  When a packet is received, the
		   checksum field is checked.  If the checksum field is 0,
		   then the OS assume that the sender does not have option
		   enabled, and therefore the checking is skipped.

		   Problem arises when a packet's computed checksum is
		   zero.  Some OS will stuff 0xffff into the checksum
		   field before sending such a message to distinguish it
		   from the case for which checksum is disabled.  Other
		   OS couldn't recognize 0xffff as an indication that the
		   actual checksum could be either 0 or 0xffff, and
		   subsequently reject the message. The client can thus
		   get stuck forever in retransmitting a request that
		   happens to have 0 for the computed checksum, but
		   0xffff for the checksum field.

		   To get around the problem, the sequence number field
		   of the request message (which has meaning only to the
		   client software), is partitioned such that 2 of the
		   bits reflect the retry sequence, and the remaining 14
		   bits reflect the request sequence.  This will ensure
		   that if one request got ignored because it happens to
		   have a checksum of 0, the next retry will result in
		   a packet that does not have a checksum of 0.  The only
		   file affected here is client_lib.c.

		3) In response to those who have severely limited UDP
		   packet sizes, the environment variable FSP_BUF_SIZE
		   is supplied to set the data size of file and directory
		   information transfers. The default is 1024.  You cannot
		   set it to be bigger than 1024, but you can set it to
		   be smaller if you find that your system cannot pass
		   UDP packets that includes 1024 bytes of data.  This
		   requires changes both in the server and the client
		   code.  The first parameter field of get-file and
		   get-directory requests contains the path of the file
		   or directory.  The second parameter field was unused,
		   but it is now used to hold the number of bytes to read.
		   This change is backward compatible in the sense that
		   if the second field is empty (old client code), the
		   new server code will default to 1024.  Changes to the
		   client code is confined to client_util.c.

Version 2.6 -- July 6, 1992

		1) client_lock.c is fixed so that perror is always
		   followed by exit.  Previously, if System-V shared
		   memory mechanism is chosen for locking control in
		   the Makefile, but the mechansim has not in fact
		   been configured into the UNIX kernel, the client
		   utilities would die of a segmentation fault error.
		   The error message will now be more reasonable.

		2) mechanism is added so FSP server can put directory
		   cache files in a special directory other than the one
		   for which the files are intended.  Previously a
		   .FSP_CONTENT file is created in each directory the
		   fspd process controls.  Through variables in the
		   Makefile, provider of fsp service can now elect to put
		   cache files together in one single directory, and put
		   a cap on the total number of such files that can exist
		   simultaneously.  The fsp server will create a cache
		   file in the cache directory when it couldn't find one
		   already exist in the directory being listed by the
		   client.  Changed are minor and invovles the routines
		   server_get_dir, server_get_dir_2 [new] in "server_file.c";
		   the variable declaration section of "server_main.c", and
		   Makefile.

		3) a line in util_cd is changed, and a line in get_dir_blk
		   is added in the file "client_util.c" to prevent fls from
		   sending some spurious requests to the fsp server.

		4) Makefile is changed to allow the option of combining all
		   client utilities into one actual binary files.  This is
		   necessary for space saving reasons on some versions of
		   UNIX.  The various small main C files for the utilities
		   had to be changed as well to accomodate this change.

		5) fver now will take an optional argument.  If none is
		   supplied, it prints the version string of the server.
		   If one is supplied, it prints the versioin string of
		   the client FSP software.

Version 2.6.1 -- Aug 31, 1992

		1) Small changes to Makefile.  In 2.6, "make" will fail if
		   you needed to define LIB, or if your command shell is not 
		   /bin/sh, and you want to merge client utilities.  Version
		   2.6.1 fixed them.  Only Makefile is changed, everything
		   else is identical to 2.6.

Version 2.6.2 -- Sep 2, 1992

		1) bsd_src/cmp.c was changed so that flscmd can sort its
		   output by date correctly on all systems.  This particular
		   version of the BSD source made assumptions about what
		   the comparison functions should return for the qsort
		   routine, but those assumptions were not true for all
		   systems.

Version 2.6.3 -- Sep 19, 1992

		1) client_lock.c is modified to fix a compilation phase
		   bug that occur when NOLOCKING option is used in the
		   Makefile.  This affects only the client code.

		2) server_file.c is modified so that upload uses the
		   directory cache directory instead of the top directory.
		   This is needed for those sites that want the top
		   directory be write protected.  (good for ftp sites).

Version 2.6.4 -- Dec 12, 1992.

		1) Make main makefile pass CC and CFLAGS definitions to
		   bsd_src's Makefile

		2) Add util_cd2 to client_util and make bsd_src/ls.c use
		   it.  This remove some of the spurious GET_DIR requests.
		   Also, there is a bug in client_util's util_cd routine
		   in that it always requests 1K worth of directory info
		   no matter what FSP_BUF_SIZE setting is used.  Causeing
		   fsp clients to hang under situations where FSP_BUF_SIZE
		   is limited by the network (slip, usually). 

		3) function server_interrupt in server_lib.c was defined
		   to be of type void to avoid complaint from some compilers.
		   There are several other minor fixes in functin variable
		   declarations in several files for the same reason.

	      3.5) The retry delay function for the client is tweaked
		   somewhat.

Wed Dec 16 12:31:29 PST 1992

		4) A change in the server_up_load function in the file
		   server_file.c is made to fix a subtle bug.  When a
		   file is uploaded, the offset to begin write was not
		   used to seek to end of file.  Instead, the file is
		   only appended to.  This cause error if two retry
		   messages in an upload was divided by a server going
		   down.  The new server is fixed so that seek based
		   on the pos parameter is done.  This eliminates the
		   possibility of such an error.

Version 2.6.5jt -- Dec 17, 1992

		1) Added support for .FSP_OK_READ and .FSP_OK_MKDIR.
                   .FSP_OK_READ allows reading the contents of files.
                   .FSP_OK_MKDIR allows creation of subdirectories.
                   .FSP_OK_ADD no longer means anything for creation of
                   subdirectories, only for creation of files.

Version 2.6.5jt.1 -- Dec 18, 1992
                1) Changed the direction of intent on the .FSP_OK_READ
                   file and renamed it to .FSP_PRIVATE.  Now prescense
                   of file means directory is private.  Done so that 
                   spurious files didn't need to be created everywhere
                   just to grant read access.  In concordance with this,
                   the procmd is no {+-}p instead of {+-}r.

Version 2.6.5jt.2 -- Dec 29, 1992
                1) Fixed a core dump in any of the programs that used
                   file globbing.  If you passed a ~ to the command
                   in this state, you would seg violate.  Fixed by 
                   removing the parsing of ~ in the glob.c file.
                   It now errors with an 'illegal character in path'.

Version 2.6.5jt.3 -- Jan  27, 1993
		1) Added in the Enhanced Trace (cps) from pi@cs.sun.ac.za
		2) Added protection from clobbering files on fget/fgrab
                   courtesy of A.E.J.Fellows (A.E.J.Fellows@bham.ac.uk)
                3) Various updates and corrections to the man pages.
		4) Merged in VMS changes.  .com files and VMS makefiles
		   as well as VMS changes files all exist in ./vms.
                   VMS specific sourcefiles are in ./vms_src and VMS
		   specific header files are in ./vms_h.  VMS changes
		   done by S.A.Pechler@bdk.tue.nl.  All changes made
		   by Sven are in ./vms/VMS.ChangeLog.  Some of the
		   changes he made there are incorporated into the
		   unix version as well.

Version 2.6.5jt.4 -- Feb 2, 1993
                1) Made the initial check for logfile opening be done
                   with mode "a" instead of mode "w+" so that it didn't
                   erase the file every time through.
                2) Reordered the includes in common_def.h so that they
                   preserved the original 2.6.5 ordering which some machine
                   types seemed dependant on.
		3) Added in Sven's repatches to make VMS compilation work.

Version 2.6.5jt.5 -- Feb 4, 1993
		1) Added extended version information and loggin information
		   to the reply from the fver command.
		2) Changed the message type on fver replies to CC_VERSION
		   instead of CC_ERR.  This just makes more sense.
		3) One more special case where SCO unix seems to require
		   a certain order in it's include files.. sheesh.
		4) Changed duplicate variable clobbertype in both fgetcmd.c
		   and fgrabcmd.c to be unique.  Moved the #defines of
		   the clobbertypes into the appropriate .h file
		5) Added a few more small fixes from Sven.
		6) Added support for restricted mode.  When server is run
		   in restricted mode ONLY users from sites appearing in
		   the .ROGUE_HOSTS file can connect.  This flag basically
		   reverses the meaning of the .ROGUE_HOSTS file, but by
		   doing so provides a cheap way of doing priveledged connect.

Version 2.6.5jt.6 -- Feb 8, 1993
		1) Added a contrib directory for user submitted programs such
		   as my admin scripts.  Currently thats the only thing here
		   but I'm sure other things will wind up here in time.
		2) Removed the redirecting of stdin/stdout/stderr to /dev/null
		   under normal operation because it was causing some true
		   error conditions (like it telling you that homedir didn't
		   begin with a / to get dumped into the bit bucket.)
		3) Fixed a logic error in the priveledged site code. sheesh.
		   NOTE: To a disallowed client, it will appear as if the 
		   server doesn't exist.  This is as far as I can tell the
		   behavior intended by Wen.
		4) Modified makefile to not use any file names longer than
		   14 characters (POSIX compliant).  This only affected the
		   merge programs.

Version 2.6.5jt.7 -- Feb 9, 1993
		1) Fixed some of the POSIX compliant naming that I missed the
		   first time around.
		2) Added Ruben Olsons admin tools and fsp-shell to the contrib
		   distribution.
		3) Fixed a small bug in switch parsing in fspd. (if you did
		   fspd -l -r it would think that -r was the filename to log
		   into.  this is wrong).
		4) Added a small patch suggested by Ruben Olson.  Now, if the
		   Remote FSP server doesn't respond (and you're not in the
		   middle of a file transfer) the client will just exit instead
		   of hanging indefinately.  It takes about 3-5 seconds for
		   the client to exit.  Basically, if pos is zero (as it is
		   unless you are transferring), then when the client would
		   first print an 'I', it will instead now exit. (enable this
		   by compiling with -DCLIENT_TIMEOUT)

Version 2.6.6 -- Mar 10, 1993
		1) Added some patches supplied by Sven Pechlar to fix a few
		   last niggling bugs with the VMS port.
		2) File sizes are now logged as part of GET_FILE (courtesy
		   of Sven).  This might make the Sumalog script useless until
		   fixed.
		3) Added an append mode to fgetcmd and fgrabcmd.  Under this
		   mode, fget/fgrab will try to append data to the end of a
		   short file.  This patch was submitted by robert@diku.dk
		   (Robert Martin-Legene)
		4) Extended the timeout time on CLIENT_TIMEOUT as requested.
		5) Added code supplied by Sven Pechlar to do password protect
		   on private directories, and to do internal file cacheing.
		   The password protect code looks extremely broken to me.
		   But I added it anyway as if no passwds are set, it
		   shouldn't break anything.
                6) Signal handling code (for BSD only) to handle cleaning up
                   .fsptemp.XXXX files on abort (courtesy of AEJFellows)
                7) Move setuid call before log file is opened. (AEJFellows)
		8) Added throughput control courtesy of Laurent Montaron
		   (montaron@eurecom.fr).  See INFO file for details.

Version 2.6.6.1 -- Mar 11, 1993
		1) Reduced the client timeout from 5 to 4.
		2) Made client timeout code default in the makefile.
		3) Made printing of 'E' on retrys conditional on
		   trace being true.
		4) Shortened temp file names so that they will always
		   fit under 14 character limit.
		5) Yet more small fixes from Sven to make 2.6.6 compile on
                   VMS cleanly. (thanks Sven)
		6) .README file support thanks to Pihl
                   (phil.richards@prg.oxford.ac.uk)
		7) More advanced Hostname security thanks to Phil as well.
		   (Look in the INFO file for details)
		8) Rewrote logging to use varargs based on ideas from Phil.
		9) If no password is supplied, and the .OWN.XXXXXXXX file is
		   empty, then you will still be able to read the directory.
		   This reinstitutes backward compatability in the server with
		   older clients that cannot send passwords.
	       10) Changes to support a local working directory for all remote
		   operations courtesy of Michael Meskes
		   <meskes@ulysses.informatik.rwth-aachen.de>

Version 2.6.6.2 -- Apr 8, 1993
		1) Added patches to make the client_timeout value be settable
		   via an environment value.  Default timeout value is 4.  The
		   change has no effect unless you compile the clients to time
		   out if there is no response. (patches by Michael Meskes)
		2) Added fducmd and fsethostcmd written by Michael Meskes.
		   fducmd is a standalone (or merge) version of the du cmd
		   that phil put into his fspclient.  Fsethostcmd supports
		   a fairly simple resource file for setting up hosts and 
		   local directories and all environment variables based on
		   information in a file.
		3) Fixed a bug in fgrab that caused you to not be able to
		   grab a file even though you could get it and then rm it.
		4) Fixed the IPHOST code.  It was returning automatic vars
		   up the stack, and assuming that assigning a structure
		   to a structure performed copy.  This is not always the
		   case, and when compiled under ultrix cc this assumption
		   broke.  The fix was to malloc the structures down and
		   pass pointers up the stack initially, and then store
		   those pointers.  The code has been tested now as well,
		   and verified to work on at least my system.
		5) The server will now log an 'Unknown command.' error
		   if it gets a command request that it doesn't know how
		   to handle, and will return this string to the requesting
		   client. (requested by Robert Martin-Legene)
		6) Fixed a bug in build_dir() reported by Phil Richards.
		   A file could get a garbaged 'long_name'.
		7) Added better logging code supplied by Phil Richards.
		8) Added reverse hostname lookup and read only mods supplied
		   by Phil Richards.
		9) Removed a bug that caused logging to be turned on even when
		   the -l option wasn't specified.
	       10) Changed the name of the fsethostcmd to fhostcmd so that
		   POSIX machine nameing conventions were followed.
	       11) Renamed the .fsprc file  used by fhostcmd to .fsp_prof

Version 2.6.6.3 -- Apr 12, 1993
		1) Added bitfields containing the version and protection
		   information into the getpro and fver commands.  Newer
		   clients should rely on that information and thus be able
		   to present it in any display format desired.
		2) Logging code will now stat the logfile and if it's no
		   longer there, it will recreate it after closing the old
		   fd.  This saves the system expense of opening and closing
		   a logfile each time we log something, and still allows the
		   deletion of logfiles during a run.
		3) Modified clients to present information from the bitfields
		   for ver and pro, and modified the server to give only
		   minimal textual information for ver and pro.
		4) Added a sanity check to FSP_DELAY variable to never let
		   it go below some specified minimum value.  This minimum
		   value is set in common_def.h and defaults to 500 usec.
		   500 usec should remove the problem of the infinite resend
		   client.
		5) Fixed a small bug in logging where it would add one newline
		   for every 1k uploaded to the logfile.

Version 2.6.6.4 -- Apr 13, 1993
		1) Fixed yet another small bug with readme files that I'd
		   created.
		2) Encased all printing of strings recieved from a remote
		   site inside some sanity to prevent them sending a %s or
		   something as part of a string and having it choke.
		3) A core dump in the logging code where there was a case
		   under which it did not return after an error is fixed.

Version 2.6.6.5 -- Apr 19, 1993
                1) Fixed a bug in the .IPHOST code.  (Thanks Laurent and Phil)
                2) Fixed a few typos and compile problems with the merged
                   client.  (Thanks to the numerous people who reported it)
                3) Changed the code for fducmd slightly (Thanks Michael Meskes)                   (NOTE: Michael has also written an ffindcmd that will be in
                   the next release, it's not included here)

Version 2.7.0 -- May 3, 1993
		1) reorganized source code completely.
		2) Installed the source code under Gnu autoconf
		3) Added ffind client submitted by Michael Meskes.
		4) Rewrote portions of the documentation.
		5) Moved all configuration out of the Makefile and
		   into header files and an fspd.conf file
		6) Added -r recursive option to fgetcmd and fcatcmd
		   (thanks to Michael Meskes).  Read man pages for details.

Version 2.7.1 -- May 7, 1993
		1) Ironed out portability problems.
		2) Fixed the pointer to in cast in server/filecache.c (thanks
		   to wen-king)
		3) Added WenKing's patches for the Dec Alpha
		4) Merged in Sven's patches for fixing 2.7.0 on a VMS system.
		5) Added aclocal.m4 with some macros to start cleaning up the
		   configure.in file a bit.  Some macros needed changing to
		   get the configure script to configure properly on a linux.
		6) Fixed a bug in server_upload where a file could not be
		   uploaded unless the server had a valid cache dir set. 
		   Thus, any sites that didn't use cache dirs couldn't have
		   files uploaded.

What needs to be done EVENTUALLY

    Somebody should make a tar equivalent that read and write remote fsp
    archives.  This will allow transfer of whole directory in one command.

    Sources should be make to pass lint with as little problem as possible.

The version of 2.7.1 that is being distributed for Linux is hopelessly
incomplete.  I copied some of the missing files I could find from other
sources, but I'm still missing things.

