Windows: ChangeLog for 1.5.75
[openafs.git] / doc / txt / winnotes / afs-changes-since-1.2.txt
index 0beef13..8c41e26 100644 (file)
+Since 1.5.74
+ * Revise SMB QuerySecurityInfo Response for MS10-020
+
+   MS10-020 (http://support.microsoft.com/kb/980232) has caused
+   many problems for implementors of SMB 1.0 servers and applications
+   that call GetFileSecurity() without checking the return code to
+   determine if the call succeeded.  The gist of the vulnerability
+   was that the SMB redirector would pass any buffer it received
+   to the application regardless of whether or not it was valid.
+   MS10-020 protects the applications by strictly validating the
+   SMB response data structure and the data in the security descriptor
+   that is returned.
+
+   The problem for SMB 1.0 server implementors is that there have
+   been at least three different protocol descriptions for
+   NT_TRANSACT_QUERY_SECURITY_DESC published over the last decade
+   and all of them are incomplete.  Therefore, just about no one but
+   Microsoft has an SMB 1.0 server implementation that produces the
+   exact out that they are expecting to validate.
+
+   The end result is that in an attempt to protect applications from
+   crashing due to invalid input being passed in directly caused
+   dozens of applications to crash by not returning any security
+   descriptor data at all.  Even when the applications didn't crash
+   they might not have been able to save their data.  Cisco WAAS
+   and NetApp DataOnTap systems were most adversely affected and
+   they have had CIFS protocol licenses for many many years.
+
+   To fix OpenAFS here is what needed to be done:
+
+   1. Instead of returning a security descriptor that gives ownership
+      to the NUL SID, give it to the Everyone SID and set the flag
+      that states that everyone has full access.
+
+   2. Validate the input parameters.  In particular, check to ensure
+      that the SMB file descriptor is valid and the file has not
+      been deleted.
+
+   3. Enforce the maximum output data and parameter counts.
+
+   4. Handle buffer overflow and buffertoosmall conditions
+      in the manner that Microsoft expects them to be handled.
+      In particular, note that the parameter data which is returned
+      in the SMB Data Region is not counted in the Data Count.
+      Even if MaxData is 0, we can still return parameters values
+      as long as MaxParm is large enough.
+
+ * Prevent use of AFSCache file contents if mapped to
+   a new address.
+
+ * The Windows version of "fs newcell" did not accept any parameters
+   and behaved quite differently from the Unix version.  Instead of
+   permitting new cell information to be added, the Windows version
+   simply forced the existing cell information to be reacquired.
+
+   This update adds a new pioctl, VIOCNEWCELL2, to support the
+   implementation of a Unix-style "fs newcell".  The functionality
+   added here differs from the Unix version in the following ways:
+
+     1. "fs newcell" with no arguments is still accepted
+        in order to maintain compatibility with prior Windows
+        behavior.
+
+     2. "fs newcell -cell <cell> -dns" instructs the cache manager
+        to add the new cell but obtain the vldb server info from
+        DNS.
+
+     3. "fs newcell -cell <cell> ... -registry" instructs the cache
+        manager to add the new cell and also save the cell configuration
+        data in the registry for use the next time the service restarts.
+
+     4. The -vlport and -fsport options are accepted although the
+        -fsport value is currently unsupported by the cache manager.
+
+ * New registry value "FreelanceImportCellServDB" instructs Freelance
+   to create a mount point for every cell name listed within the
+   CellServDB.
+
+ * Path MTU discovery for Rx is activated.
+
+ * Rx socket input buffer is converted to a circular buffer.
+
+ * Fix usage of cm_FreeServerList().  Do not set the server list
+   pointer to NULL after calling cm_FreeServerList().  Doing so
+   can result in a memory leak.
+
+ * Only enable Rx NAT pings on a single anonymous connection at a
+   time.
+
+ * Fix cm_IoctlSkipQueryOptions() buffer management.  Prevents a
+   potential read beyond end of memory buffer.
+
+ * Reduce requested privileges when reading registry CellServDB
+   to the minimum required.
+
+ * Add support for RPC Pipe Service NetWkstaGetInfo levels
+   101 and 102 which are called on Windows 7 and 2008-R2.
+
+ * Prevent integer overflow during quota percent used calculation
+   in Explorer Shell Extension  (RT 126846)
+
+ * Generate a meaningful error if "fs listacls" or "fs setacls"
+   are executed on the Freelance root.afs volume.
+
+ * RXAFS_InlineBulkStat errors must be processed via cm_Analyze.
+   RXAFS_InlineBulkStatus does not return errors such as EACCES,
+   VNOVOL, VNOVNODE, VOFFLINE, VBUSY, VIO, VMOVED, etc. as an RPC return
+   code.  Instead they are returned in the status info errorCode field
+   for each file.
+
+   Traditionally, the error associated with the first FID in the query
+   list has been returned to the caller of cm_TryBulkStatRPC().
+   However, the error has never been processed through cm_Analyze()
+   which means that the per-vnode processing for VNOVNODE and the volume
+   global processing for VMOVED, VNOVOL, etc. has never been performed.
+   As a result, failover to other .readonly volume instances cannot occur,
+   volume moves will not be handled, and files that have been deleted
+   are not detected.
+
+   This patchset makes the following changes:
+
+   1. If an inline bulk operation has been performed and the inline
+      errorCode is a volume global error, then that error replaces
+      the RPC return code within the cm_Analyze() processing for
+      the RPC.  This will affect whether or not a retry operation
+      is performed.
+
+   2. The variable 'inlinebulk' is reset to 0 at the top of the
+      cm_Analyze() loop in case failover from an inlinebulk capable
+      file to an inlinebulk incapable file server takes place.
+
+   3. The FID that is passed into cm_Analyze() is not a real fid.
+      Instead it consists of the cell and volume but vnode = 0.
+      This ensures that the error (if any) is not applied to the
+      directory object.
+
+   4. If an inline bulk operation was performed, prior to performing
+      the cm_MergeStatus() operation a vnode a check is made to
+      determine if an error was returned for that vnode.  If so,
+      cm_Analyze() is called with no connection, a fake cm_req_t,
+      the fid, and the error.  This permits cm_Analyze() processing
+      to be performed on the file.  
+
+ * Show configuration pages for all types of MSI installations
+
+   The OpenAFS MSI installer wizard used to not show any configuration
+   pages for "Typical" and "Complete" installations.  Setting the
+   workstation cell and logon options during installation required
+   selecting the "Custom" option.  Many users choose the "Typical" option
+   during installation, and thus would never see the configuration pages.
+   Therefore, for these users, the workstation cell was being set to the
+   default.
+
+   This patch makes the workstation cell and logon option configuration
+   pages visible to all types of installations (except silent
+   installations which show no UI).
+
+ * cm_LookupInternal creates Freelance mount points and symlinks
+   when queries cannot be found in the Freelance root.afs directory.
+   If the search name is a full cell name for which vldb information
+   can be obtained, then a mount point is added.  If the search name
+   is a left-most substring or the full cell name with a dot appended
+   to it, then a symlink was created.  This approach created a very
+   poluted Freelance name space.
+
+   This patchset makes the following changes:
+
+    1. Do not create symlinks with a dot appended to the cellname
+
+    2. Do not create symlinks where the left-most substring is not
+       a full dot separated component of the cellname.
+
+    3. Permit lookups to succeed when we would have created a
+       symlink in the past without creating the symlink.
+
+ * BPlus tree lookups are much faster than searching through
+   the native directory format on Windows because the case sensitive
+   hash tables cannot be used successfully.  Permit BPlus trees
+   to be used except when called with cm_BPlusDirFoo as the action
+   function because cm_BPlusDirFoo is used to build the BPlus trees
+   from the native directory format.
+
+ * Symlinks are ending up in the Freelance root.afs directory that
+   end with a dot.  Make sure it cannot happen.
+
+ * cm_FreelanceAddMount and cm_FreelanceAddSymlink is supposed to
+   return the allocated FID of the entry that was added.  However,
+   cm_NameI is called to perform the lookup without forcing an update
+   of the Freelance fake directory.  As a result the entry may not be
+   found.
+
+   Force an update prior to calling cm_NameI() by using
+   cm_clearLocalMountPointChange() and cm_reInitLocalMountPoints()
+   if required.
+
+ * The Freelance fake root directory buffers were not zero-filled.
+   This results in random behavior that can cause the service to
+   terminate unexpectedly.
+
+ * The validation check for the response from the GetVolumeStatus
+   pioctl is incorrect.  The response is not simply a VolumeStatus
+   structure but also several C strings appended to it.
+
+ * When flushing a file, we need to commit the file length changes
+   as well as the dirty buffers.  Call cm_FSync instead of buf_CleanVnode
+   which is called by cm_FSync.
+
+ * Prevent rx_rpc_stats global lock from being a bottleneck in the
+   Rx library.
+
+Since 1.5.73
+
+ * Avoid a race when updating cell vldb server lists
+   that can result in a crash.
+
+ * Avoid a deadlock when managing CM_SCACHESYNC_STOREDATA
+   state operations for directory objects.
+
+ * Add new Windows Application Event log messages for
+   VBUSY, VRESTARTING, ALL_BUSY, ALL_OFFLINE, and ALL_DOWN.
+   Include message throttling to prevent the same message
+   from being logged repeatedly within a five second window.
+
+ * Reduce lock contention by waiting for cm_buf_t I/O
+   operations to complete before permitting cm_SetupStoreBIOD
+   to analyze a buffer for inclusion in a BIOD.
+
+ * Split the cm_buf_t flags field to separate the flags
+   that are protected by the cm_buf_t mutex from those
+   protected by the buf_globalLock.  This eliminates the need
+   to hold both locks everytime the flags field is accessed.
+   Both locks were not held in the past resulting in race
+   conditions that could result in deadlocks.
+
+ * Add "vos setaddrs" command.
+
+ * Rx library lock contention avoidance between rx_NewCall and
+   rx_EndCall.
+
+ * Rx library races due to inconsistent use of rx_connection
+   conn_data_lock to protect the flags field.
+
+ * Rx library inconsistent use of RX_CALL_TQ_WAIT which could
+   result in deadlocks.
+
+ * Rx library must signal transmit queue waiters when flushing.
+   Otherwise, deadlocks can occur.
+
+ * In cm_UpdateVolumeLocation, avoid searching for a ".readonly"
+   volume on a numeric volume name.
+
+ * File buffer allocations whose offsets are beyond server EOF
+   should be locally allocated and zero filled.  The file server
+   should not be issued a FetchData rpc which is guaranteed to
+   fail.
+
+ * Enable integrated logon to work with Windows 7/2008 when
+   user logons are performed with a non-Domain Kerberos principal.
+
+ * Add Protection Error messages to aklog output.
+
+Since 1.5.72
+
+ * Prevent the Explorer Shell extension from crashing if
+   symlink creation failed.  (126406)
+
+ * A Rx level NAT ping has been implemented.
+   Add NatPingInterval registry value to
+     HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters
+   to permit Nat Ping to be enabled.  The default value is 0 seconds.
+
+ * When a re-initialization is taking place, be sure to reset
+   cm_noLocalMountPoints to 0 in case someone deletes the "Freelance"
+   registry key out from underneath the service.
+
+ * Add krb5 error message translation to aklog, afscreds,
+   afslogon.dll, the network identity manager afs provider
+   and translate_et.
+
+ * Mode bits aren't directly exposed by the Win32 API. We were leaving
+   them to default to 0777 when creating new files and directories.
+   This version introduces two configuration parameters;
+   'UnixModeFileDefault' and 'UnixModeDirDefault' which are DWORD
+   registry entries that are used to set the initial mode bits.
+   If the values are set to 0, then the behavior is identical to what we
+   had before.
+
+ * Minidump files are now produced with a timestamp appended
+   to the name.
+
+ * An SMB request debugging monitor has been added.  When activated
+   the monitor will automatically turn on trace logging if any SMB
+   request has required longer than 60 seconds to complete and will
+   then create a minidump every 60 seconds thereafter until the
+   request completes.
+
+Since 1.5.71
+
+ * Restore use of DNS AFSDB and SRV records by kaserver clients.
+
+Since 1.5.70
+
+ * Avoid a potential Freelance deadlock during initial execution 
+   of afsd_service.exe if the old ini file data has to be
+   imported.
+
+ * Three rx library corrections.  (1) Idle data connection
+   processing could timeout if the send window filled and
+   took longer than the idle data timeout period for the
+   transmit window to re-open.  (2) The transmit queue
+   could be emptied prematurely.  A required check for the
+   queue being in use was forgotten.  (3) The function that
+   is supposed to implement a wait for the transmit queue
+   to cease being busy failed to wait.
+
+Since 1.5.69
+ * Restore use of DNS AFSDB and SRV records which were
+   unintentionally disabled in 1.5.69
+
+Since 1.5.68
+ * Add a context menu to the NetIdMgr AFS Provider 
+   notification icon.
+
+ * Prevent an empty directory Btree from being created and
+   marked as valid if cm_BPlusDirBuildTree fails.
+
+ * cm_BPlusEnumAlloc should not fail if the enumeration
+   contains zero entries.
+
+ * In cm_BPlusXXX functions, return ENOMEM if malloc() fails.
+
+ * Do not leak the cm_scache_t dirlock if cm_BPlusDirBuildTree
+   fails.
+
+ * fs examine should report owner and group ids as signed values.
+
+ * Protect buffers in smb_WriteData from simultaneous writes.
+
+ * Query network interface MTU values from the registry because
+   the IP Helper GetAdapterAddresses() fails to report a manually
+   configured MTU.
+
+ * Improve performance by not dropping and reacquiring the rx_call
+   lock in rx_WriteProc* and rx_ReadProc*.
+
+ * When configuring the rx library, the network interface MTU
+   must be applied to both the maximum send size as well as the
+   maximum receive size as is done when rx_SetMaxMTU is called
+   by the application.
+
+There was no 1.5.67 release
+
+Since 1.5.66
+ * Convert afsauthent.dll to use the xdr_alloc and xdr_free
+   routines from afsrpc.dll in place of malloc and free.
+   This permits the two libraries to be built with different
+   C runtime libraries without crashing.
+
+ * Set the DOS Readonly attribute on a file/directory 
+   whenever the unix mode combined with the mask 0200 
+   is true.  Previously there was a discrepency between
+   the mask used for testing for readonly behavior and
+   that used for setting the attribute.
+
+ * Disable AFSVolSync based .readonly "whole-volume callback"
+   support because the all file servers prior to 1.5.67
+   (and perhaps 1.4.12) do not properly assign a value to
+   the AFSVolSync structure in bulk status RPC responses.
+
+ * Improve the error output from aklog to output the value
+   from krb5 error_message() if the afs_com_err output
+   indicates an unknown value.
+
+ * Hold a lock on the cm_scache_t object when the smb
+   server is assigning a new clientModTime value.
+
+ * Permit custom build version numbers to be set
+   without modifying the src/config/NTMakefile.<platform>
+   files.
+
+ * Add support for binary code signing with cross-signed
+   certificates and arbitrary versions of signtool.exe.
+
+ * Convert VBUSY and VRESTARTING to CM_ERROR_ALLBUSY and
+   do not permit them to be exposed to the smb redirector.
+
+ * Convert STATUS_TIMEOUT responses to STATUS_IO_TIMEOUT
+   to avoid confusion within the smb redirector.
+
+ * Fix the byte order assigned to port numbers associated
+   with AFSDB record lookups.  They must be network byte 
+   order not host byte order.
+
+ * Add dynamic server ranking based on RPC round trip
+   time measurements.
+
+Since 1.5.65
+ * Official support for Windows 7 and Server 2008 R2
+
+ * Improved Rx RTT computation following the lessons
+   learned by TCP.
+
+ * Prevent a file server bug (FetchData returning an
+   invalid length instead of zero) from causing an
+   "unexpected network error" when writing to files.
+
+ * Promote DNS SRV records as superior to DNS AFSDB
+   records.  Support arbitrary port numbers for vldb
+   servers.
+
+ * Add "fs listacl -cmd" support.
+
+ * Add AFSVolSync based .readonly "whole-volume callback"
+   support.  With this functionality, multiple objects from
+   a .readonly volume can have their status validated by
+   issuing a single RXAFS_FetchStatus RPC.
+
+ * Remove drive mapping functionality and service start/stop
+   from afscreds.exe.
+
+ * Remove drive mapping functionality from afs_config.exe.
+
+ * Adjust SMB error return codes to avoid returning 
+   STATUS_TIMEOUT which results in the SMB redirector
+   disconnecting.
+
+ * Network Identity Manager OpenAFS Provider now provides its
+   own "AFS lock" notification icon to report the status of
+   "have tokens, have no tokens, service not started, service
+   started but inaccessible".  Hovering over the icon lists the
+   cells for which tokens exist (if any) and the OpenAFS version
+   number.  Double-clicking executes the Network Identity Manager
+   default action.
+
+ * When merging the current status for an AFS object, ensure
+   that the volume status for that object is set to 'vl_online'.
+
+ * Permit cm_Analyze to request a retry even when the cm_req_t is
+   flagged CM_REQ_NORETRY if the RPC failed due to RX_CALL_DEAD.
+   The retry will force the use of a new connection.
+
+ * Add digital signatures to resource only dlls as required by
+   Windows 7.
+
+ * Prevent pioctl calls from retrying indefinitely when a sharing
+   violation error occurs.
+
+ * Add {HKLM,HKCU}\SOFTWARE\OpenAFS\Client  DWORD  "ShowMountTab"
+   to restore access to drive mapping functionality in afscreds.exe
+   and afs_config.exe.
+
+ * Permit Rx minimum peer timeout, maximum receive window size and
+   maximum send window size to be configured via the registry.
+
+ * The MSI installer now sets the ARPINSTALLLOCATION as required by
+   Windows 7.
+
+ * DNS lookups set the port numbers in network byte order within
+   the cache manager.
+
+ * Replace use of the 16-bit compatibility API WinExec with
+   ShellExecuteEx in afs_config.exe and afscreds.exe.  WinExec
+   is incompatible with Windows 7 / Server 2008 R2 UAC 
+   functionality.
+
+Since 1.5.64
+ * Short circuit background volume checks if a shutdown
+   or suspend request is received.
+
+ * Avoid contacting the file server in order to allocate
+   an empty buffer beyond the current length of the file.
+
+ * When a request for streams on a directory or mount 
+   point object is received, do not offer a default stream.
+   This was affecting the saving of roaming profiles.
+
+Since 1.5.63
+ * Fix Windows 2000 compatibility.  Do not call rand_s() 
+   even if it is compatible with the C run time library
+   version.
+
+ * Fix a data consistency error between the output of 
+   NetWkstaGetInfo and NetServerGetInfo RPCs, specify the Lan 
+   workstation group name "AFS", and report server name as 
+   "AFS" instead of "\\AFS" when the caller asks for "\\AFS".
+
+ * Enable executables to be run from \\AFS on Windows 7.  
+   Return "Name not found" instead of "File not found" when 
+   a directory or file name cannot be found.
+
+ * Prevent cache manager from marking file server "down" when 
+   the data returned in response to either RXAFS_FetchData64 
+   or RXAFS_StoreData64 is invalid.
+
+ * Add pioctl data validation to the AFS Explorer Shell extension.
+
+Since 1.5.62
+ * After 1.5.62 afslogon.dll would no longer crash but it 
+   also would not load "domain" specific configurations.
+   Fixed.
+
+ * An uninitialized variable was present in the symlink
+   recursion detection loop.
+
+ * Reverse addition of unique per file GUID during 
+   Create/Open responses. Inclusion of the GUID prevents 
+   Cygwin applications (and others) from accessing //afs.
+
+ * Treat "filename::$DATA" as a synonym for "filename".  
+   This addresses the recent report of roaming profiles 
+   failing to save back to the file server.
+
+ * When given a choice between an error from rx_Write() 
+   or RXAFS_EndStoreData(), use the rx_Write() error.  
+   This ensures that over quota and access denied errors 
+   are acted upon.
+
+ * If an error occurs during RXAFS_StoreData operations, 
+   apply that error to all of the buffers in the BIOD. 
+   This ensures that failures will not be retried if they 
+   will only fail again.
+
+ * Do not perform a DNS lookup for a cellname if the 
+   cellname prefix is _._AFS_IOCTL_._.  This will avoid 
+   DNS lookups when the query is for 
+   _._AFS_IOCTL_._.F7E5F580200909010061TTTTNT7TT.{10E39A49-4531-4496-A08E-842D4C440D20}.
+
+ * Fix Freelance root.afs volume object callback processing.  
+   Object synchronization and status merging bugs.
+
+ * Fix Explorer Shell "invalid parameter" bug introduced 
+   in 1.5.62.
+
+ * Log RXKAD errors to the trace log.
+
+ * Prevent simultaneous pioctl calls from multiple processes 
+   from stepping on each other's data.
+
+ * Prevent simultaneous pioctl calls from crashing the 
+   afsd_service.
+
+ * Add data validation to pioctl output processing in 
+   ktc_GetToken and ktc_ListTokens.
+
+ * Add data validation to pioctl output processing in 
+   fs.exe and symlink.exe.
+
+Since 1.5.61
+ * IMPORTANT: New support for DCE RPC Services: SRVSVC and WKSSVC.
+   No longer will browsing \\AFS produce truncated share names.
+
+ * Registry specified server preferences did not result in
+   the CM_SERVERFLAG_PREF_SET flag being applied to the
+   cm_server_t object.  
+
+ * Avoid unnecessary DNS lookups of share names as cells
+   when it is known that the name cannot be a cell name.
+   Any name that does not contain a dot is skipped.
+
+ * When processing Dfs Referral requests, do not return an
+   error if the server is down or busy; if the volume is
+   offline; the cell vldb cannot be reached; etc.
+   These paths are still \\AFS paths and so the client 
+   should not be sent to search elsewhere for resolution.
+
+ * CRITICAL: Prevent the cm_Daemon thread from terminating when
+   the machine enters the suspend state.  IF the cm_Daemon thread
+   dies, there is nothing to execute down server checks.
+
+ * Prevent use of smb_StartedLock before initialization which
+   can result in a panic in the lock package.
+
+ * Improve error checking in afslogon.dll in order to prevent
+   NULL pointer dereferences within GetLogonDomainOptions()
+   if the Lsa operations fail.
+
+ * Add support to the build system to automatically update
+   a Microsoft Symbol Store.
+
+ * Do not access the cm_conn_t after executing the cm_Analyze
+   loops.  Doing so can result in an access to memory that has
+   been freed.
+
+ * CRITICAL: If a StoreData request offset is not aligned on the 
+   buffer module blockSize, (offset % blockSize) bytes of dirty
+   data will not be written to the file server.
+
+ * CRITICAL: If a StoreData64 request is sent to a file server
+   that does not support large files (>2GB) and the client is 
+   unaware that the server has no large file support, the first 
+   chunksize worth of data will not be written to the file server.
+   This bug was introduced in 1.5.3.   It affects all IBM AFS file
+   servers and all OpenAFS file servers older than 1.4.0.
+
+Since 1.5.60
+ * If a file server becomes inaccessible while the cache manager has 
+   dirty buffers to write, the afsd_service buf_IncrSync thread can 
+   attempt to use 100% of the cpu.
+
+ * Fix the locking that protects the cm_cell_t lists 
+   (all, name, id, free).
+
+ * Remove cm_cell_t objects from the name and id hash tables before 
+   placing them on the free list.
+
+ * Fix "fs newcell" which was broken in 1.5.60.
+
+ * Do not attempt to synchronize dirty buffers if the associated 
+   volume is known to be unavailable.
+
+ * Log to the Windows Event Log dirty buffers that cannot be written 
+   during the shutdown process.
+
+ * Modify behavior of a Freelance mountpoint target that does not 
+   specify a cell.  Instead of assuming the target volume is in the 
+   Freelance.Local cell, use the workstation "Cell" specified in the 
+   registry. A mountpoint target of "#root.cell." will now mean the 
+   root.cell volume in the workstation cell for the current session.  
+   If the workstation cell changes from "athena.mit.edu" to 
+   "andrew.cmu.edu", the referenced volume will also change without 
+   requiring that the mount point targets be altered.
+
+ * Avoid false infinite loop errors when validating the cm_cell_t 
+   free list during startup.
+
+ * Fix two more locations where xdr_free() should be used instead of 
+   free() to permit a checked built of afsd_service.exe to work with 
+   release builds of afsrpc.dll.
+
+ * Add cm_FindServerByUuid().  Re-implement RXAFS_InitCallBackState3() 
+   to permit the server Uuid to be used to lookup the server object 
+   and from that determine the cell.  This permits callbacks that are 
+   received from alternate addresses to be processed with a known server 
+   object.  Previously a request from an unknown server would clear all 
+   callbacks from all cells.
+
+ * Fix a bug that prevented optimal performance when using a non-zero 
+   value for 'daemonCheckVolCBInterval'.  As a reminder, when 
+   "daemonCheckVolCBInterval" is set to a non-zero value, all .readonly 
+   volume callbacks are automatically renewed 90 minutes before their 
+   expiration.
+
+ * Fix automatic ranking of vldb servers whose values are obtained from 
+   the CellServDB file.
+
+ * Add logging for RX CALL DEAD errors which are generated if the remote 
+   host is unreachable.
+
+ * Add failover for RX CALL TIMEOUT errors when the volume is readonly 
+   or the call is to a vldb server.
+
+ * Add registry based cell search functionality to NetIdMgr, 
+   afs_config.exe, and klog.exe.
+
+ * afsconf_GetCellInfo() has been modified to perform gethostbyname() 
+   lookups on the host names in the CellServDB instead of using the 
+   specified IP addresses.  This provides aklog, pts, vos, etc. the same 
+   CellServDB behavior that the Windows Cache Manager uses.
+
+ * Completely a behind the scenes change.  The snprintf() routines have 
+   been completely rewritten.
+
+ * When updating the stat cache entry callback of a .readonly object 
+   from the volume group object, update the file server reference to 
+   ensure it matches the most update to date callback.
+
+ * Add proper support for processing callbacks from multi-homed file 
+   servers.  Instead of comparing servers by cm_server_t pointer, 
+   compare them by UUID when the UUID is known.
+
+ * During a shutdown short circuit the offline volume check daemon 
+   functionality.
+
+ * Properly track link counts during cm_Link and cm_Unlink operations.
+
+ * Return the error code of RXAFS_FetchData / RXAFS_StoreData in 
+   preference to an error code reported by rx_EndCall.
+
+ * Add "PerFileAccessCheck" registry value to permit testing against 
+   experimental file servers that include per-file acl support.  This 
+   value is intentionally undocumented.  It is not to be used by
+   production environment deployments.
+
+ * Log a warning to trace log if a volume group is marked as a DFS 
+   File Set.  The Windows OpenAFS client does not include DFS support.
+
+ * Fix a bug introduced in 1.5.60 that prevents the afs netidmgr 
+   provider from obtaining tokens when referrals are in play.
+
+ * Add "fs chown" and "fs chgrp" commands to permit the owner and 
+   group of objects stored in AFS to be set from Windows.
+
+ * Avoid performing background daemon operations when the machine is 
+   going into suspend mode.
+
+ * Perform offline volume checks in most recently used order.
+
+ * Prevent crash when a data version for a cache object goes backwards.
+
+ * fs setquota, fs setcachesize, vos setfields, and vos create now 
+   accept human readable orders of magnitude. (K, M, G)
+
+ * fs listquota fixed to permit large quota sizes to be displayed.
+
+ * rx packet resend and data packets sent counts were incorrect.
+
+ * Multi-thread safe library versions are now being generated and used.  
+   mtafsubik.lib, mtafsutil.lib, mtafsvldb.lib, mtafsvol.lib.
+
+ * Microsoft SMB Redirector (mrxsmb.sys) support for ExtendedSessTimeout
+   values are now available on XP through Windows 7.  Add functionality
+   to autodetect if such support is present on the machine.  If so,
+   configure it if necessary and dynamically adjust the AFS Rx timeout
+   values accordingly.
+
+ * Correct another race condition in the Rx library that could result
+   in an unexpected panic while freeing the Rx call iovq.
+
+Since 1.5.59
+ * A fix to the pioctl library to support drive substitution 
+   to UNC paths.  (SUBST <d:> <\\afs\cell\path>).
+
+ * On April 9th Microsoft released a Hot Fix for Windows Server 2003 SP2 
+   that corrects a deadlock in the smb redirector and also adds new 
+   functionality that permits the AFS SMB server to be given a longer 
+   timeout than is normally the case.  New functionality has been added 
+   to configure these additional LanmanWorkstation\Parameter values.
+   (This functionality has been backported to XP SP3 and is scheduled
+   to be released on June 5th.)
+   
+ * The BackConnectionHostNames registry value configuration was broken 
+   when dynamic re-establishment of Netbios Name registrations was added.
+   Restore it.
+
+ * Hidden vos commands are revealed.
+
+ * If the "DisableLoopbackCheck" registry value is set, do not unset 
+   it during the same service session.
+
+ * Reorganize code that prevents multiple Store operations to the same 
+   File.
+
+ * Modify IsPathInAfs test in Explorer Shell Extension and fs.exe to 
+   permit broken symlinks to be treated as being in AFS.
+
+ * Fix vos commands that output 64-bit integer values.
+
+ * Cygwin Import Libraries are provided in the SDK for all OpenAFS DLLs.
+   Permits building cygwin applications against OpenAFS libraries. 
+
+ * OpenAFS Release Notes, Administrator Guide and User Guide now installed 
+   as Windows HTML Help (.CHM) files.  
+
+ * NSIS installer does a much better job of cleaning up files left 
+   over from previous installs.
+
+ * Fix RT#124787, a race condition between "fs flush <dir>", "fs flushvolume", 
+   or "fs flushall" and on-going directory operations that can result in 
+   afsd_service.exe crashing.
+
+ * Add support for DNS SRV records in place of AFSDB records.  
+   _afs3-vlserver._udp.<cellname>.  Priority field is used.  
+   Weight is currently ignored.
+
+ * Add a method of specifying Client CellServDB information within the 
+   registry that can be used to either override the CellServDB file or 
+   force the use of DNS lookups for a given cell.
+
+   The registry schema is as follows:
+
+     HKLM\SOFTWARE\OpenAFS\{Client,Server}\CellServDB\[cellname]\
+       "LinkedCell" REG_SZ "[cellname]"
+       "Description" REG_SZ "[comment]"
+       "ForceDNS" DWORD {0,1}
+
+     HKLM\SOFTWARE\OpenAFS\{Client,Server}\CellServDB\[cellname]\[servername]\
+       "HostName" REG_SZ "[hostname]"  Default: [servername]
+       "IPv4Address" REG_SZ "[address]"  Used only if gethostbyname() fails.
+       "IPv6Address" REG_SZ "[address]" <future>
+       "Comment" REG_SZ "[comment]"
+       "Rank" DWORD "0..65535"  Default: 0
+       "Clone" DWORD "{0,1}" <future: server only>
+       "vlserver" DWORD "7003" <future>
+       "ptserver" DWORD ... <future>
+
+   ForceDNS is implied non-zero if there are no [servername]
+   keys under the [cellname] key. Otherwise, ForceDNS is zero.
+   If [servername] keys are specified and none of them evaluate
+   to a valid server configuration, the return code is success.
+   This prevents failover to the CellServDB file or DNS.
+   
+   Only one of "HostName" or "IPv4Address" is required.  "HostName"
+   is optional if [servername] is the host name.
+
+ * Extend registry based CellServDB functionality to 
+   afsconf_GetCellInfo() interface used by aklog and many 
+   other command line utilities.
+
+ * libafsconf.dll moved from OpenAFS\Client\Program to OpenAFS\Common
+   as it is now used by both client and server components.
+
+Since 1.5.58
+ * PriorityClass of afsd_service.exe process raised to 
+   "High" to match the priority of the system services 
+   that are waiting for afsd_service.exe to respond.
+   Configurable using [TransarcAFSDaemon\Parameters]
+   DWORD "PriorityClass" value.  (use values from Win32
+   API)
+
+ * Change error reporting of CM_ERROR_BADSHARENAME to
+   use the correct error (NTSTATUS_BAD_NETWORK_PATH).
+   The error we were sending would cause the smb 
+   redirector to drop the connection.
+
+ * Change the error reporting of CM_ERROR_ALLOFFLINE
+   and CM_ERROR_ALLDOWN to return NTSTATUS_PATH_NOT_FOUND.
+   Previous we would return Bad Network Path which 
+   would cause the smb redirector to cancel all file
+   handles on the same "share".
+
+ * A debug version of afsd_service.exe can now be used
+   with a release version of afsrpc.dll (or vice versa).
+   afsrpc.dll now implements and exports xdr_free().
+
+ * Removed all unprotected OutputDebugString() calls as
+   those calls can block for up to 10 seconds if there 
+   is contention for the globally shared memory or if
+   the debugger fails to read data in a timely manner.
+
+ * Visual Studio 2008, WDK 6.1 and DDK 6.1 are now 
+   supported for builds.  The production releases still
+   use VS 2005.
+
+Since 1.5.57
+ * Discovered that XP/2003 supports a variant on recvmsg 
+   called WSARecvMsg.  The input parameters are mostly 
+   compatible with the Posix recvmsg.  This will save 
+   multiple memcpy() calls per received packet.
+
+ * Discovered that Vista/2008 supports a variant on 
+   sendmsg called WSASendMsg.  The input parameters 
+   are mostly compatible with the Posix sendmsg.  This 
+   will save multiple memcpy() calls per sent packet.
+
+ * Exporting rx_ReadProc32, rx_WriteProc32 from afsrpc.dll 
+   and utilizing rx_ReadProc32 from within the cache manager 
+   as part of the FetchData operations.  rx_ReadProc32 and 
+   rx_WriteProc32 are optimized versions of rx_ReadProc and 
+   rx_WriteProc for use when reading 32-bit integer values.
+
+ * The Network Identity Manager AFS provider now reports 
+   progress events.  These provide a better user experience 
+   with Network Identity Manager 2.0.
+
+ * [RT 124293] A race condition exists which permits the 
+   scp field of the an smb_fid_t object to become invalid 
+   after a request on the smb_fid_t has begun.  Remove the 
+   race by protecting all access to the scp field with the 
+   smb_fid_t mx mutex and obtaining a local reference on 
+   the cm_scache_t object for the length of the request.
+
+ * [RT 124276] If the vldb is out of sync with the contents 
+   of the file servers, afsd_service will retry too many 
+   times when a file server reports a volume as not being 
+   present.  Now if the list reported by the vldb is the 
+   same as the previously seen list, then the retry is 
+   aborted.
+
+ * [RT 124276] Read-only volume failover was broken in 
+   1.5.53 whenever accessing a volume results in VNOVOL or 
+   VMOVED.
+
+ * [RT 124276] Prior to 1.3.70 the volume server reference 
+   list was not reference counted and would be prematurely 
+   freed while in use.  When reference counting was added 
+   in 1.3.70 a bug was introduced that could result in 
+   service reference list corruption.
+
+ * Add Windows Application Event Log warning messages for 
+   "Client SMB MPX value too large" and 
+   "Client SMB Buffer Size too small".
+
+ * Renaming of files across directory boundaries would result 
+   in an invalid handle error when attempting to access the 
+   files after the move.
+
+ * Fix the handling of Tran2 Set Path Info RPCs.  Do not fail 
+   when a smb file descriptor cannot be found.  The whole point 
+   of using a Path Info function is because an smb file 
+   descriptor wasn't allocated.
+
+ * More edge cases in which dynamic addition of Freelance 
+   root.afs entries would get the wrong FID or where the 
+   root.afs directory would not be refreshed.
+
+ * Buffer overflow could occur if the workstation cell name was 
+   longer than 64 characters.  Crashes could occur in 
+   afscreds.exe, afslogon.dll, and afsd_service.exe.
+
+ * VNOSERVICE and VOFFLINE errors were leaking and were exposed 
+   to the smb client.
+
+ * Improve consistency of the bad data version value used for 
+   cm_scache fields.
+
+ * Log file server uuid values as part of the cm_server object 
+   when available.  Dump the cm_server object list in response 
+   to "fs memdump".
+
+ * Optimize the performance of resetting access control lists 
+   when tokens are set or removed.
+
+ * Fix vos.exe so that it can work with very large volume 
+   identifiers
+
+ * Remove symlink recursion tests and increase max symlink count 
+   to 64 from 16.
+
+Since 1.5.56
+ * Undo the "UAC manifest fix" applied to afs_config.exe.
+
+ * Fixed some additional race conditions in the Rx library
+
+ * Ensure that Freelance allocation of vnodes follow 
+   the AFS convention of odd vnodes are directories 
+   and everything else is an even vnode.
+
+ * Add Freelance logic to mount point and symlink 
+   evaluation functions.
+
+ * Enhance smb_ParseASCIIBlock() so that it can handle
+   all of the STRING formats defined by the CIFS Technical
+   Report 1.0.  
+
+ * Validate the output of smb_ParseASCIIBlock() in all
+   callers.  Return CM_ERROR_BADSMB if the STRING field
+   cannot be parsed.  CM_ERROR_BADSMB will cause the
+   contents of the packet to be logged.
+
+ * If multiple SMB Raw Write operations were taking 
+   place at the same time, there could be data corruption
+   because unique event objects were not generated for 
+   each Netbios receive operation.
+
+Since 1.5.55
+
+ * Fix a race in rxi_WriteProc which could result
+   in a freed or in use packet being passed to 
+   rxi_PrepareSendPacket if the call is currently
+   in a transmit wait state.  Passing a freed packet
+   will result in a panic.  Passing an in use packet
+   might result in a call failure or perhaps data
+   corruption.
+
+ * Kerberos referrals broke the NIM AFS provider 
+   logic for automated configuration of the workstation
+   cell with a new identity.  Now if a referrals 
+   response is returned, assume the cell belongs to the
+   new identify.
+
+ * The interface to buf_CleanAsync() and 
+   buf_CleanAsyncLocked() has been changed to permit 
+   errors to be propagated to the caller.  
+
+ * During an enumeration of a directory, if the btree
+   has not yet been generated, return an error.
+
+ * When mapping CM_ERROR values to NTSTATUS values
+   do not treat 0 as an error.
+
+ * Avoid a cm_scache_t object reference count underflow
+   when renaming via the SMB interface.
+
+ * smb_IsMask() can be called with a non-8.3 input buffer.
+   Separate smb_IsMask() into smb_Is8Dot3Mask() for 8.3
+   input buffers and smb_IsMask() for non-8.3 input buffers.
+
+ * Add cm_buf_t error state to the "fs memdump" output.
+
+ * pioctl drive mapping checks need to take into account
+   Global Drive Mappings and SUBST assignments.
+
+ * Rename operations should not be permitted if the 
+   destination name collides with an existing name that
+   differs only by case UNLESS the collision is the object
+   that is being renamed.
+
+ * Increase the maximum number of background daemon threads
+   to 64.  Leave the default at 4.
+
+ * Set the FILE_UNICODE_ON_DISK flag when reporting the 
+   file system characteristics.
+
+ * Report the maximum component name length as 255 even
+   for Unicode as part of the file system characteristics.
+
+ * Add RX debugging information to "fs memdump" output
+   in checked builds.
+
+ * Refcount the cm_server_t objects returned by
+   cm_FindServerByIP()
+
+ * Fix the UAC manifest applied to afs_config.exe
+
+ * rxdebug now indicates if any RX_CONN flag is set
+   not just some of them
+
+ * Change the mapping of CM_ERROR_WOULDBLOCK from 
+   NTSTATUS_LOCK_NOT_GRANTED to NTSTATUS_CANT_WAIT
+
+Since 1.5.54
+
+ * Includes #GCO Public CellServDB 07 Nov 2008
+
+ * Prevent separate cell entries from being created for
+   "foobar.org" and "foobar.org." which can happen if
+   an AFSDB record is found instead of a CellServDB 
+   record.
+
+ * Fix a panic when checking the SMB virtual circuit list.  
+   If a VC is destroyed while the list is being checked 
+   it is possible for the next object to become invalid.
+
+ * Increased logging to afsd_init.log of netbios name 
+   related errors.
+
+ * Fix a DNLC panic when a UTF-16 string that cannot be 
+   converted to a utf-8 string is provided as a filename.
+
+ * In the NSIS installer, delete old afslogon.dll/afscpcc.exe 
+   from %windir%\system32 and fix the WinLogon\Notify\AfsLogon 
+   location to refer directly to the new location in 
+   %programfiles%\openafs\client\program
+
+ * Be more aggressive about responding to Netbios 
+   NRC_BRIDGE/NRC_NOWILD errors.  Rebind the Netbios name to 
+   the LANA within the listener thread without performing a 
+   delete and reset.
+
+ * Use the WNet Enumeration of all connected drives as a filter 
+   in the pioctl GetIoctlHandle operation.  This should remove 
+   the last situations in which there was a delay when opening 
+   an Explorer Shell properties menu with the AFS Shell 
+   Extension.
+
+ * Fix the parsing of CellServDB in Windows to handle linked 
+   cells as is done on Unix.
+
+ * Add support for linked cells to the cache manager,
+   netidmgr afs provider, and aklog.  When two cells are
+   linked, a volume lookup that fails in one cell is looked
+   up in the other.  This can be used for construction of 
+   test cells that override specific volumes; cell renaming;
+   and cell splitting.
+
+ * Increase the length of cell and realm names that can 
+   be entered in the NIM AFS provider.
+
+ * Actively prevent a 32-bit afsd_service.exe from 
+   executing in the WOW64 environment.
+
+ * Protect against invalid IP address values in CellServDB
+   parsing.
+
+Since 1.5.53
+
+ * Fix an Rx panic caused by an attempt to double free
+   an rx_packet when an error occurs while writing the
+   packet.
+
+ * Fix an exception cause by a race condition when 
+   processing multiple file change notifications registered
+   by the Explorer Shell or other applications.
+
+ * Modify the Rx debug interface to use var_args and 
+   permit Rx debugging to be used on 64-bit Windows 
+   which previously had it disabled.
+
+Since 1.5.52
+
+ * Automated lock hierarchy enforcement added to the
+   osi base lock package.  This permits detection of lock
+   violations that might but often does not result in 
+   deadlocks.  Enabled by default in the checked builds.
+   May be activated in release builds via the registry
+   value "LockOrderValidation" in the TransarcAFSDaemon
+   Parameters key.
+
+   When a violation is detection an assertion is thrown
+   generating a dump file and a message indicating which
+   locks were obtained out of order is logged to the 
+   Windows Application Event Log.
+
+ * Attempt to ensure that a dump file will be generated
+   whenever the service panics.
+
+ * Removed unused lock cm_bufGetMutex
+
+ * Many out of order lock acquisitions were detected
+   using the lock order verifier and were corrected.
+
+ * A race condition within the function path cm_GetSCache() ->
+   cm_GetNewSCache() -> cm_RecycleSCache() permitted a 
+   cm_scache_t object to be issued simultaneously to two 
+   threads.   This would eventually result in a panic due 
+   to the resulting undercount.
+
+ * Fix interpretation of the empty string as the ioctl path
+   to mean the current directory.  "fs lsm", "symlink list", 
+   etc. now return a "not a ..." error instead of "does not
+   exist".
+
+ * Add SMB_STRF_SRCNULTERM flag to smb_ParseStringXXX functions.
+   to indicate that the input string is a nul terminated string.
+   Assign ti when input strings are nul terminated instead of 
+   length counted. (from 1.5.50)
+
+ * The CIFS protocol specification for handling NT_TRANSACT_CREATE
+   does not match the observed behavor.  The 'nameLength' is specified
+   in bytes, not in characters.  Fix the implementation to match
+   the observed behavior. (1.5.50)
+
+ * The cm_HaveAccessRights() attempt at deadlock avoidance by 
+   calling lock_TryRead() on the parent directory cm_scache_t rw-lock
+   does not avoid the deadlock.  Avoid the deadlock by enforcing the
+   lock order of the lowest vnode first.  Then remove the infinite 
+   loop avoidance in cm_SyncOp() that was returning an unwarranted
+   access denied error.
+
+ * File Server lock synchronization was not propertly enforced in 
+   smb_ReceiveNTCreateX() and smb_ReceiveNTTranCreate().
+
+ * Another change to the short name generator.  Plus and equal are 
+   not valid characters in a short name according to the 
+   RtlIsNameLegalDOS8Dot3() in kernel mode.  They have been replaced
+   with left and right brace in order to minimize the impact.
+
+ * Fix a race condition that can result in a heap overwrite error if
+   the number of known file servers or vldb servers increases during
+   the preparation phase of a cm_CheckServers() operation.
+
+ * If the SMB Authentication would fail, a LSA allocated memory 
+   buffer would be leaked.
+
+ * Rewrite the cm_cell_t allocation code to permit cell vldb server
+   lookups to fail without leaking cm_cell_t objects.
+
+ * Add "fs setcrypt auth" to permit the use of rxkad authentication
+   only mode.  Not documented.
+
+ * Initialize Rx mutex and lock objects once and only once as part of
+   the DLL load process.
+
+ * When reporting the Volume Name "AFS" do not include the terminating
+   NUL in the reported length.  
+ * Refresh Volume Location information upon receipt of a VNOVOL error
+   from the file server and avoid a race condition that prevented the
+   updated volume location information from being destroyed immediately
+   after it was acquired.
+
+ * In response to VNOVOL and VMOVED, remove the volume id from the server's
+   volume list so that the volume's up and down status is not affected 
+   when the machine is shutdown.
+
+ * Many fixes to the Rx stack related to packet allocation and deallocation;
+   Rx debugging; Rx packet tracking across queues; and Rx packet loss caused
+   by overwriting the rx_call currentPacket pointer when it was already 
+   referring to a packet.  
+
+ * Rx Jumbograms are now off by default.  To re-enable, add "RxJumbo" = "1"
+   in the TransarcAFSDeamon/Parameters key.
+
+ * "fs flush", "fs flushvolume", and "fs flushall" now destroy locally 
+   constructed directory B+ trees for flushed directory objects.
+
+ * When cached pages for directory objects have been locally modified, do
+   not permit the locally modified pages to be mixed with pages subsequently
+   obtained from the file server.  Doing so can result in directory 
+   corruption.
+
+ * If Ubix errors are received in response to VL_xxx operations record
+   the error on the server instance and permit the operation request to 
+   be retried in case another server is able to answer the query.  We have
+   seen at least one instance of a cell in which a VL server returned 
+   UNOQUORUM (possible database truncation) when the other servers were
+   responding successfully.
+
+Since 1.5.51
+ * Optimize the assignment of write errors to dirty 
+   buffers by applying the first error to all buffers 
+   belonging to the same object instead of trying each 
+   buffer in turn.
+
+ * Add resource version info to xstat_fs_test and xstat_cm_test
+ * Fix a delete vs delete[] usage problem in the WiX custom 
+   handler dll
+ * When creating a mount point, validate the volume name to 
+   make sure it exists.
+
+ * When processing a mount point, pay attention to VL_BADNAME 
+   errors.
+
+ * Remove a race condition from cm_volume_t recycling that could 
+   have resulted in two threads making use of the same object at 
+   the same time.
+
+ * Fix a reference count leak on smb_vc_t objects introduced in 
+   1.5.50.  Permit the objects to be freed once again.
+
+ * Fix the output of "fs memdump" for smb_vc_t objects that was 
+   broken in 1.5.50.
+
+ * Add routines for debugging smb refcount errors.
+
+ * When shutting down the cache manager, do not permit AFS 
+   callback requests to be processed. Doing so can result in 
+   invalid memory accesses.
+
+ * Do not recycle a deleted cm_scache_t object unless the 
+   refCount is 0.  Doing so can result in a deadlock and 
+   invalid memory access.
+
+ * Minimize the number of RPCs sent to the file server for 
+   directory bulk status requests. Only request status for 
+   objects that we are actually reporting on and only if we 
+   do not already have status for the object and then make 
+   sure that we return as much as we can at once via the SMB 
+   interface but not so much that it exceeds the RDR timeout
+
+ * Enable bos restricted operations
+
+ * Fix the creation of submounts used by the afscreds and afs_config 
+   drive mapping tabs.
+ * Avoid repeated retries when attempting to obtain access rights.  
+   If the access rights were obtained successfully but do not 
+   satisfy the request, fail the request.
+
+ * Fix error code reported when attempting delete a file on a 
+   readonly volume or one that is marked with the readonly DOS 
+   attribute.
+
+ * Fix a short name truncation bug.
+
+ * Fix a heap corruption error when reading the CellServDB file 
+   location.
+
+ * Fix directory listings when the directory has "lookup" permission 
+   only and the directory has never been previously accessed.
+
+ * Fix several tracking issues for cm_scache_t rw locks.
+
+ * Ensure that all buffers used to store cell names are the
+   correct length.
+
+ * Restore Windows 2000 support (broken in 1.5.50).   
+   LOCALE_INVARIANT was introduced in XP.
+
+ * Add RxUdpBufSize registry value.  Default is 256K.
+
+ * Avoid multiple deadlocks between cm_freelanceLock and cm_scacheLock
+
+ * Do not include trailing NULs when returning file names in 
+   a directory search response.
+
+ * Prevent RX from crashing the afsd_service by attempting
+   to allocate to many buffers at once when memory is fragmented.
+
+ * Avoid a deadlock when freeing cm_server_t objects
+
+ * Optimize search cell file.  Do not search to end of file
+   if the cell has already been found.
+
+ * Remove explorer shell extension delay on local disks.
+
+ * Automatically pre-allocate 64 Rx packets per thread
+
+ * Add smb lock requests and stat cache lock allocations to
+   the output from fs memdump.
+
+Since 1.5.50
+ * Fix Large File Support (broken in 1.5.50)
+
+ * Fix "fs setacl" (broken in 1.5.50)
+
+ * Fix pioctl path evaluation of drive letter
+   mapped paths. (broken in 1.5.50)
+
+ * Fix installation of VC8 Runtime library in the EXE
+   Retail installer. (broken in 1.5.50)
+
+ * Avoid a potential deadlock during Volume Location 
+   updates if all the file servers are unreachable at 
+   the time the VL update succeeds.
+
+ * Ensure that rx connection object is references 
+   during VL RPCs.
+
+ * Fix propagation of over quota errors during cm_FSync()
+   calls.
+
+Since 1.5.39 [1.5.50 released 16 July 2008]
+ * There were no releases between 1.5.39 and 1.5.50.
+
+ * FIRST RELEASE WITH UNICODE SUPPORT
+
+ * Pioctl interfaces to the cache manager refactored
+   to provide layering between the SMB specific code
+   and the general purpose ioctl operation.
+
+ * Garbage collect dead SMB virtual circuits as soon
+   as they are no longer being referenced.  This avoids
+   problems with outstanding locks not being dropped
+   when the virtual circuit becomes invalid.
+
+ * Remove the IBM Administration Reference documentation
+   and replace it with the OpenAFS Command Reference 
+   Manual.  
+
+ * Avoid calling rx_SetDeadTime and rx_SetHardDeadTime
+   functions each time a connection is about to be used.
+   Do not hold a lock on the rx connection object while
+   it is being selected.  This avoids a race between 
+   threads attempting to set the timeout values and 
+   removes a bottleneck that was hampering performance.
+
+ * Ensure that the smb directory attribute is set 
+   for all directory objects.
+
+ * Add vs2008 support to the NSIS installer scripts
+
+ * Replace the VC Runtime EXE installer with the MSI
+   installer in the NSIS installer scripts
+
+ * Properly delete the VC7.1 C Runtime libraries.   
+
+Since 1.5.36 [1.5.39 released 23 June 2008]
+ * There were no 1.5.37 or 1.5.38 releases for Windows
+
+ * Use Visual Studio version of vsprintf() instead of 
+   home grown version that resulted in linking conflicts
+
+ * Prevent buserver, ptserver and fileserver from crashing
+   due to non-portable strftime() format strings.
+
+ * Prevent server crashes caused by rx_InitMorePackets()
+   being called prior to allocation of all of the required
+   synchronization objects.
+
+ * Fixed a memory leak in the internal B+ tree directory.
+   For objects with non-8.3 names, the 'longname' memory
+   allocation would be leaked during object deletion or
+   tree destruction.
+
+ * Fixed a memory leak in the background daemon cm_CheckServer() 
+   routine.  The memory allocated to store the server list
+   was not freed.  
+
+ * Obtain a missing lock around a call to cm_RemoveSCacheFromHashTable(). 
+
+ * Correct an abstraction layer violation. cm_scache_t objects 
+   should be marked deleted in cm_Unlink() and cm_RemoveDir() and not 
+   in smb_CloseFID(). Cleanup of deleted cm_scache_t objects should be 
+   performed in cm_ReleaseSCache() when the reference count hits zero. 
+
+ * Prototype cm_AdjustScacheLRU() and re-implement it using osi_QAddH().
+
+ * Do not reference 'smb_logp' in cm_vnodeops.c.  Use 'afsd_logp'
+   instead.
+
+ * Ensure that scache object 'nextp' pointers are set to NULL
+   when the objects are removed from the hash table linked list.
+
+ * If a dirty buffer cannot be written to the file server because
+   of an access denied error, mark the error in the cm_buf_t
+   structure so that it can be dealt with instead of retrying 
+   forever.
+
+Since 1.5.35
+ * Update CellServDB file to GCO Public 23 Apr 2008
+
+ * Fix a cm_buf_t reference count leak when attempts to write 
+   dirty buffers to the file server from within cm_IncrSyncer() 
+   fail.
+
+ * Prevent udebug from crashing.
+
+ * Activate RX Idle Timeouts.  If the file server is busy for more 
+   then 30 seconds, attempt to failover to another server without 
+   marking the busy server down.
+
+ * Another VNOVNODE issue fixed.  When writing a dirty buffer
+   to the file server, if VNOVNODE is received, mark all buffers
+   as invalid without further attempts to contact the file server.
+   
+ * Improved performance on high latency links.
+
+Since 1.5.34
+ * Fix a bug preventing the re-initialization of the Freelance 
+   root.cell contents when a change is made.
+
+ * Properly return CM_ERROR_NOSUCHFILE when removing a symlink 
+   or mountpoint that does not exist.
+
+ * aklog, afscreds, integrated logon, and the NIM AFS credential 
+   provider will all attempt to first acquire an afs service ticket 
+   using the service principal: afs/<cell>@<CLIENT_REALM>.  This 
+   permits the proper detection of the cell realm when multiple 
+   realms are local realms for the cell.
+
+ * Fix fs commands that re-use file identifiers instead of forcing 
+   a path evaluation each time.  This was broken in 1.5.33 when 
+   hashes were added to the cm_fid_t structure.
+
+ * Fix symlink and mountpoint removal and then recreation when 
+   applied to the fake Freelance root.afs volume.
+
+ * Fix SMB change notifications for the Freelance root.afs volume 
+   when creating or removing symlinks and mount points.
+
+ * Force DNS AFSDB cell name lookups to lower case if the DNS 
+   response is not all lower case.
+
+ * 32-bit installers are now built with Visual Studio 2005
+
+ * All vos.exe commands now support the "-noresolve" option which 
+   forces the display of IP addresses instead of DNS hostnames.
+
+ * No longer hold the cm_volume_t mutex across VL_xxx RPCs.  This 
+   permits operations that do not require up to date volume 
+   location data to continue while waiting for the RPC to complete.  
+   Multiple threads waiting for a volume location update on the 
+   same volume set no longer trigger multiple calls VL_xxx RPCs.
+
+ * Volume server references could be marked offline and never 
+   reset to the not_busy state.  
+
+ * Further optimizations to cm_Analyze() retry logic for 
+   CM_ERROR_OFFLINE and CM_ERROR_ALLBUSY error handling.
+
+Since 1.5.33
+ * Optimize the DNLC by applying Interlocked incrementing for 
+   statistics gathering and enabling greater use of read 
+   locks instead of write locks
+
+ * Further optimize osi_Log operations when logging is disabled 
+   by removing the need for the function call overhead.
+
+ * Add a new lock operation, Convert Read to Write, and apply 
+   it throughout the cache manager.  This function provides a 
+   fast transition from a read lock to a write lock when the 
+   caller is the only reader.
+
+ * Fix a timeout problem when opening files or request locks 
+   when the file in question is already write-locked by another 
+   machine.
+
+ * Fix a deadlock that can occur if "fs flushall" is executed 
+   while applications are writing to AFS.
+
+ * The cache manager would re-read data from the file server 
+   after file truncation when obtaining buffers to write to the
+   same file until the first StoreData RPC completes.
+
+ * Fixes error handling in cm_NTCheckDelete()
+
+ * Replaces cm_scache_t mutex with a read-write lock permitting 
+   additional parallel access.
+
+ * Prevent an cm_scache_t reference undercount when evaluating 
+   symlinks containing @sys when none of the active sysnames 
+   match any of the available targets.
+
+ * Prevent the leak of a cm_scache_t rwlock if associated symlink 
+   is too long.
+
+ * Set RxMaxMTU registry value to 0 which is the equivalent of 
+   it not being set at all.
+
+ * Reduce contention between BkgDaemon threads
+
+ * Prevent CM_SCACHEFLAG_ASYNCSTORE from being reset on a write 
+   failure
+
+ * Convert reference counts on cm_volume_t, cm_conn_t, cm_server_t 
+   objects to use the faster Interlocked operations which avoid 
+   the need to hold write locks.
+
+ * Permit rxkad errors other than RXKADEXPIRED to be treated as a 
+   non-fatal error that forces a retry against another service 
+   (if available.)
+
+ * Fix a crash in smb_WriteData that would occur if an application 
+   opened the file as read-only and then sent a write request anyway.  
+   (RT 88731)
+
+ * Respond to VL_NOENT errors by removing cm_volume_t object and
+   setting it to be the first object to be recycled.  This is not 
+   only a more efficient use of resources but it also prevents 
+   repeated attempts to query the VLDB server for the volume from 
+   the CheckOfflineVolumes routine.
+
+ * Change the defaults for RxEnablePeerStats and RxEnableProcessStats 
+   back to "on".
+
+ * A first cut at a cache manager statistics monitor that can be used 
+   to determine the necessary cache parameters to support the 
+   application working set.
+
+   Off by default, the performance package can be activated by setting 
+   "daemonPerformanceTuningInterval" in the service Parameters key.  
+   As with the other daemon interval values the unit is in seconds.
+
+   At service start and each succeeding interval the cache manager 
+   will write statistics to %TEMP%\afsd_performance.txt showing the 
+   relative usage of cm_scache_t, cm_volume_t and cm_buf_t objects.  
+   The FID statistics keep track of all FIDs seen by the cache manager 
+   during the service session whether or not they are backed by any 
+   live object in the cache.
+
+   These statistics are not stored in the cache file.
+
+ * Fix windows event logging broken in 1.5.33.
+
+ * Eliminate multiple calls to syscfg_GetIFInfo() which is used to 
+   populate the IP address list for WhoAreYou/TellMeAboutYourself RPCs
+   as well as when computing the server preference list.
+
+ * When merging status after a StoreData operation prevent data 
+   buffers from being discarded that we would prefer to keep.  
+   (Bug introduced in 1.5.33.)
+
+ * Modify installers the set RxMaxMTU to 0.
+
+ * In the AFS Configuration Panel on the Advanced->Miscellaneous 
+   dialog, the Background Daemons and Service Threads fields were 
+   swapped.
+
+ * Increase default number of Background Daemons to 4.
+
+ * Remove cm_volume_t reference from the cm_scache_t object.  Permit 
+   cm_volume_t objects to be recycled.
+
+ * Windows Error Reporting has shown a number of previously unseen 
+   stack corruption errors in the Explorer Shell extension.  The 
+   minidump appeared to indicate the problem was in ParseAcl().  
+   Reviewing the function it appears that numerous things could go 
+   wrong if invalid input was provided.  Added error checking and 
+   data validation.  Hopefully this will address the problem.
+
+ * Windows Error Reporting has shown crashes in aklog as a result
+   of krb5_cc_get_default() failures not being handled.  They are
+   now handled.
+
+Since 1.5.32
+ * The Rx library used a 32-bit type for sockets which was
+   truncating the socket value on 64-bit Windows.  This 
+   was not an issue in general but became an issue when 
+   Rx "hot thread" support was enabled.
+
+ * Enable "Rx hot thread" support which ensures that while
+   a received message is being processed that a new thread
+   is allocated to receive the next message to arrive.
+
+ * Increased parallel access to smb_rctLock protected 
+   resources.  Reduce the number of times that the 
+   lock is dropped and re-obtained.
+
+ * Increased parallel access to cm_scache_t and cm_buf_t
+   resources by replacing the previous global write lock
+   protected reference counting mechanism with one built
+   upon the use of InterlockedIncrement and InterlockedDecrement.
+
+ * Implement a hash for cm_fid_t to reduce comparison costs
+   and inline the cm_FidCmp() function.
+
+ * Redefine the BUF_HASH and BUF_FILEHASH in terms of the cm_fid_t 
+   hash which has a better distribution
+
+ * Modify cm_ConsiderPrefetch to evaluate the amount of data in 
+   the most recent read request instead of the next chunkSize.  
+   cm_chunkSize can be dozens or hundreds of buffers.  As a result
+   too much time is spent performing the evaluation.
+
+ * Fix the usage of cm_scache_t bufCreateLock.  The purpose of this 
+   lock is to prevent the creation of new buffers while a truncation 
+   is being performed.  All references to bufCreateLock have been 
+   removed except in two places:
+   i.  a write-lock surrounding the function that calls buf_Truncate()
+   ii. a read-lock within buf_GetNewLocked() that actually allocates 
+       new buffers
+
+ * Modify the CM_CONFIG_DATA_MAGIC value to include a 
+   CM_CONFIG_DATA_VERSION number which value be used to force the 
+   replacement of the cache file contents when incompatible changes 
+   are made between releases.
+
+ * CM_SCACHESYNC_ASYNCSTORE should not be ordered by 
+   cm_SyncOpCheckContinue
+
+ * Avoid calls to multi_Rx if nconns == 0
+
+ * Modify smb_WriteData to perform background writes based upon the 
+   crossing of 'smb_AsyncStoreSize' boundaries instead of cm_chunkSize 
+   boundaries.  This will slow down writes from the SMB interface but 
+   will avoid the risk of the CIFS client disconnecting from the AFS 
+   client SMB server.  The default value for 'smb_AsyncStoreSize'
+   is 128K.  
+
+ * SMB AsyncStore functionality is on by default but can be 
+   disabled using the registry value:
+
+     HKLM\SOFTWARE\OpenAFS\Client DWORD "EnableSMBAsyncStore"
+
+   smb_AsyncStoreSize can be adjusted with 
+
+     HKLM\SOFTWARE\OpenAFS\Client DWORD "SMBAsyncStoreSize"
+
+   The value must be a multiple of the buffer block size 
+   and cannot be larger than the chunk size.
+
+ * Do not leak a read lock on the bufCreateLock
+
+ * Do not forget to call cm_SyncOpDone if cm_SyncOp succeeded
+   in cm_CheckNTOpen()
+
+ * In MergeStatus, only remove clean buffers from the hash table.
+
+ * Avoid the need to update the data version number on each buffer 
+   associated with a scache when MergeStatus is called after a 
+   StoreData by maintaining a range of valid data versions as part 
+   of the cm_scache_t object.
+
+ * Profiling shows large numbers of blocked calls in cm_HoldSCache
+   from cm_HaveAccess...   We can safely avoid the call so do so.
+
+ * Add "ForceAnonVLDB" service parameters registry value.  Default
+   is 0.  Set to 1 to force the use of anonymous connections to
+   the VLDB servers.  This is useful when using krb5 tokens and the
+   VLDB servers have not been updated.
+
+Since 1.5.31
+ * Do not attempt to search for a cell name that matches one
+   of the special share names "svrsvc", "wkssvc", "ipc$"
+
+ * Issue permission denied warnings from afscreds if attempts
+   to modify the startup shortcut or registry values fail.
+   This happens under Vista UAC.
+
+ * Do not return BAD_NETWORK_ERROR in response to attempts
+   to create directories or files in the Freelance root.afs 
+   volume.  Instead return ACCESS_DENIED.
+
+   BAD_NETWORK_ERROR was being sent because the Freelance cell 
+   has no vldb servers.  Short circuit the error by testing for 
+   freelance in CreateFile and MakeDir
+
+ * Treat srvsvc, wkssvc and ipc$ as pseudo files.  Permit them 
+   to be opened and closed without actually existing.  For now 
+   we treat them as equivalent to ioctls but this should 
+   eventually change.
+
+ * Fix RAP processing to not reject names that exist in the 
+   root.afs volume for GetInfo queries.
+
+ * In afscreds, use GetUserNameEx to obtain the username instead 
+   of searching the registry.  Try UserPrincipalName first and 
+   fallback to SamCompatible.
+
+ * Stop linking to rpcns4.dll which is no longer supported on 
+   Vista and 2008.  TaAfsAdmSvr is going to have to be 
+   redesigned.
+
+ * When processing dfs referral requests, if the sharename is 
+   a partial match and therefore will not be added automatically 
+   to the share list, make sure that we return an error.
+
+ * Avoid a crash when logging VNOVOL errors returned from 
+   cm_CheckOfflineVolume.
+
+ * When trace logging is disabled, do not permit osi_LogSaveString 
+   to perform the string copying.  By disabling the string 
+   copies, throughput of the service more than doubles.
+
+ * when checking offline volumes, update the cell vlserver info
+   if required and don't perform a check if there are no servers
+   in the list.
+
+ * Add volumes in the vl_unknown state to the list of objects to be
+   checked as offline or retried when an allbusy error is received
+   in cm_Analyze.
+
+ * Add support for configuring rx_ExtraPackets
+
+ * All calls to buf_Get() must be protected by a read lock on the
+   cm_scache_t bufCreateLock
+
+ * When a MergeStatus results in the invalidation of buffers, do
+   not remove buffers from the hash tables that have active references.
+
+ * Upon receiving a VNOVNODE error from a file server, be sure to
+   invalidate any file locks.  This prevents on-going attempts to
+   extend the locks and will cause subsequent attempts to access
+   the file to receive a invalid handle error.
+
+ * Prevent smb_ReceiveTran2SearchDir from adding terminating NULs
+   to directory entry names.
+
+ * No longer discard tokens when RXKADBADTICKET error is received.
+   Instead return STATUS_NO_KERB_KEY error.
+
+Since 1.5.30
+ * Add "cmdebug <host> -cellservdb" option and client service 
+   implementation permits querying the vldb server for each 
+   cell known to the cache manager.  The output is in a form
+   that permits it to be used as a CellServDB file.
+
+ * Add Symlinks->Show option to the AFS Explorer Shell Context
+   Menu
+
+ * Prevent buffer overrun in the cmd parser used by command
+   line tools such as fs, vos, pts, etc.
+
+ * The path ioctl operations have several issues:
+
+   (1) the specified path for "fs examine, whereis, whichcell, 
+       flush" and so always has the follow symlinks and mount 
+       points semantics.  This makes it impossible to determine 
+       what the FID of a symlink or mount point is.
+
+   (2) "fs examine" out is not the result of a single pioctl 
+        operation but is actually the combined output of half 
+        a dozen operations.  Path evaluation is an expensive 
+        operation.  It would be faster if the caller could
+        evaluate the FID first and then perform all of the 
+        rest of the operations by specifying the FID instead 
+        of the path.
+
+   (3) fs output reports all objects as files.  By adding a 
+       GetFileType pioctl more informative output can be provided 
+       that indicates what type of object the path evaluates to.
+
+   (4) the Windows fs command includes a number of commands that 
+       do nothing but exist only because the Unix cache manager 
+       supports them.
+
+   A new extendible data structure cm_ioctl_query_opts_t has been 
+   added which can be optionally specified with pioctls that do not
+   already require input data.  The first two fields of this structure 
+   are 'literal' and 'fid'.  The literal field is used to indicate
+   whether the last component of the path should be evaluated following 
+   symlinks and mount points.
+
+   The fid field permits a fid to be specified.
+
+ * A new GetFileType pioctl has been added. The type of objects are 
+   now output.
+
+ * A new "-literal" option is available for "fs examine, flush, whereis, 
+   and whichcell.
+
+ * Unimplemented fs commands have been removed.
+   
+ * There are circumstances where a volume object is being accessed and 
+   the volume is marked indicating that the volume location information 
+   is out of date but where it is also pointless and perhaps dangerous 
+   to block waiting for the rpc to complete.  One example is when 
+   processing the cmdebug requests.  If we know that we are not going 
+   to use the volume object to contact a server, then we can now set 
+   the CM_GETVOL_FLAG_NO_RESET flag.
+
+ * when moving up in the directory tree we search the recorded fid list 
+   to find a matching fid that we have already crossed.  we must also 
+   reset the fid count based upon what we discover.
+
+ * Cell names are published as share names.  As a result they are searched
+   for as part of the Dfs Referral evaluation.  If share "foo" can not be
+   reached, the CIFS client will fallback to searching for "fo" as well.
+
+   Since the freelance client automatically adds a symlink for prefixes
+   of the cell name, this results in both "foo" and "fo" being added to
+   the freelance root.afs volume.  This patch prevents that negative side
+   effect.
+
+ * when tracking Kerberos credential cache names be sure to include 
+   the cache type prefix.
+
+ * Microsoft has assigned OpenAFS a network type value
+
+ * The algorithms that were used to produce a Netbios name were broken.
+   The name that was produced when the hostname was too long was in fact
+   longer than the maximum permitted netbios name.
+
+   Also, the "NetbiosName" value was not used as a suffix when the loopback
+   adapter was not installed.  The hardcoded string "AFS" was used instead.
+
+ * avoid another deadlock during server probes initiated by the ipaddr 
+   change daemon thread.
+
+ * prevent the afs client service from crashing when fs newcell is 
+   executed
+
+ * In the NSIS installer, move afslogon.dll, afscpcc.exe and afs_cpa.cpl 
+   to \Program Files\OpenAFS\Client\Program in order to get them out
+   of the %windir% tree
+
+ * EDQUOT == WSAEDQUOT.   Define it in the right places so that in the 
+   end STATUS_OUT_OF_QUOTA can be returned to the application.
+
+ * Modify the search order for determining the location of CellServDB
+   and other client configuration files.
+
+   1. AFSCONF environment variable
+   2. registry setting
+   3. NEW - use All Users\AppData\OpenAFS\Client only if CellServDB exists
+   4. use Program Files\OpenAFS\Client
+
+ * More Vista Power Management tweaks
+
+ * Close a socket handle leak in the kauth routines
+
+ * Don't hold a cm_volume_t mutex across RPCs
+
+ * Convert downTimes to use clock time instead of relative times.
+   This permits correct comparisons with expiration times.
+
+ * Update the Wix installer to properly install the prerequisites 
+   for translate_et.exe
+
+ * Do not translate pioctl paths as they are not converted by the
+   file system stack.
+
+ * Implement multi_rx probes for checking whether servers are up
+   or down.  Turns probes into a constant time activity instead 
+   of one dependent upon the number of known servers.
+
+ * Treat VNOVOL errors the same as VOFFLINE.  Do not force an
+   update of the volume location data and retry.  VNOVOL means
+   that the volume could not be attached.  It doesn't mean that
+   the volume is not on this server.
+
+ * Modify the Explorer Shell AFS Context menu Symlink->Add to
+   not attempt to validate the target path.   There is no reliable
+   method of doing so.
+
+ * Improve performance of \\afs\<cell><mount-type><volume>\
+   access by eliminating extraneous attempts to search the 
+   CellServDB file and DNS AFSDB records.  Share names 
+   containing '%' or '#' are not valid cell names.
+
+ * Return STATUS_RANGE_NOT_LOCKED if the application attempts
+   to unlock a range that is not currently locked.
+
+ * Enable the 32-bit tools to read the 64-bit registry keys
+   when executing in the WOW64 environment.
+   
+
+Since 1.5.29
+ * Fix buffer refcount leak introduced in 1.5.29
+
+ * Prevent the NIM AFS Provider from crashing when configured to use 
+   Kerberos v4 for token acquisition in situations where no Kerberos v4
+   support is available.  For example, 64-bit KFW or sites that delete
+   the Kerberos v4 DLL.
+
+ * In afsd_init.log, support logging cache sizes greater than 2GB.
+
+ * The volume status output of "fs examine" was being determined based
+   upon the wrong error value.  Instead of using the pioctl() return
+   code, the errno value must be used.  
+
+ * Prevent invalid pts auto-registration attempts by aklog and the 
+   NIM afs provider when Kerberos referrals are in use.  (krb5 1.6+)
+
+ * Add synchronization protection to all of the SMB Listener State 
+   variables.  This prevents race conditions when the addition or
+   loss of a network adapter takes place.
+
+ * On Vista, there is a race condition between the restart of the 
+   afs client service and the network adapters.  Ensure that the 
+   afs client service can handle switching between loopback and 
+   non-loopback modes of operation.
+
+ * Fix FollowBackupPath to work with mount points that are not 
+   explicitly read/write.
+
+ * Fix a deadlock that has been observed on Vista while resuming
+   after at least four hours of sleep.
+
+ * Add new HKLM registry configuration options that can be used 
+   to provide configuration hints to the NIM AFS Provider when 
+   creating new identities.  See release notes for details on
+   HKLM\SOFTWARE\OpenAFS\Client\Realms\.
+
+Since 1.5.28
+ * Speed up write buffer operations by holding a global read-lock
+   instead of a write-lock when updating the buffer data version 
+   number.  The data version is protect by the associated stat
+   cache mutex.
+
+ * Speed up read buffer operations by removing out of date buffers
+   from the buffer hash tables.
+
+ * Protect against a null pointer dereference in afslogon.dll
+   if QueryAdHomePathFromSid() fails.
+   
+ * Remove a race condition while accessing private freelance data
+   structures.
+
+ * Update the buffer data versions when Freelance directory data
+   changes.
+
+ * Complete the implementation of smb_ReceiveTran2GetDFSReferral().
+   Critical for Vista.  
+
+ * Return EAS_NOT_SUPPORTED in response to EA read/store/query 
+   instead of returning zero length.
+
+ * Return ERROR_RETRY when a server sends VBUSY.
+
+ * Return PATH_NOT_COVERED instead of BADSHARENAME for DfsLinks when
+   a volstat plug-in is in use.
+
+ * Enhance the volstat interface to support Dfs path mappings.
+
+ * Fix "symlink list" to do the right thing for Dfs links
+
+ * Fix callback expiration that was broken in 1.5.27.
+
+ * Fix a crash at shutdown caused by the lack of synchronization
+   within the daemon threads (cm_Daemon, cm_BkgDaemon, cm_IPAddrDaemon)
+
+ * Hold the cm_server_t mutex while walking or modifying the 
+   cm_server_vols_t list in order to avoid a race condition.
+
+ * Ensure that the cm_server_t refCount is safely modified.
+
+ * The pthread library implementations of pthread_cond_wait
+   and pthread_cond_timedwait were failing to return with 
+   the mutex held when error conditions occurred.  This could
+   result in race conditions wherever they are used.  One case
+   in which problems were seen was the Rx event_handler().
+
+ * Prevent cm_GetBuffer() from locking all buffers associated with 
+   a stat cache object before deciding if the current buffer is up 
+   to date.
+
+ * Fix cm_BkgPrefetch to actually ensure that there is a cm_buf_t 
+   object for each offset that we will attempt to reserve.
+
+ * Reduce the default number of background daemon threads used to 
+   prefetch or store to one in order to prevent two or more threads 
+   from stepping on each other.
+
+ * Reduce the default chunk size to 256KB in order to prevent read 
+   timeouts on low bandwidth connections.
+
+ * Fix a race condition that could result in threads becoming stranded 
+   when synchronizing multiple requests on the same stat cache object.
+
+Since 1.5.27
+ * The GiveUpAllCallBacks functionality that was added in 1.5.21
+   has been disabled.  It has been disabled because it turns out
+   that the RPC is improperly implemented in all file servers 
+   previous to 1.4.6.  The RPC is executed without the proper 
+   locks being held resulting in data corruption and eventual file
+   server failure.  The functionality will be re-enabled in a 
+   a few months.
+
+ * a couple of .readonly Volume Callback optimizations were 
+   implemented:
+   -  Apply most recent volume callback to all stat cache objects 
+      in the volume.  This avoids premature callback expirations 
+      and unnecessary FetchStatus calls.
+   - Add option to permit attempts to renew .readonly Volume 
+     Callbacks on a periodic basis to avoid invalidation of stat 
+     cache data.  [Requires daemonCheckVolCBInterval be set to 
+     non-zero number of seconds.  1800 (30 minutes) is suggested.]
+
+ * Adds support for 64-bit data version values.  Previous releases 
+   only supported 32-bit values.  Larger values sent by the file server 
+   would result in rollover.
+
+ * aklog and asetkey no longer generate an exception if Kerberos for 
+   Windows is not installed.
+
+ * If the LSA authentication functions report a temporary out of memory 
+   condition, fail the current authentication and do not cause the AFS 
+   client service to terminate unexpectedly.
+
+ * When the AFS client service is shutting down, prevent the daemon check 
+   thread from executing additional checks which might attempt to access 
+   discarded locks or unmapped memory.
+
+ * Correct a double free condition in the NIM AFS credentials provider.
+
+ * Add "FollowBackupPath" service parameter registry value.   
+   This provides equivalent functionality to the UNIX afsd -backuptree
+   option.  When set to a non-zero value, normal mount points originating
+   in a .backup volume will prefer a .backup volume.
+
+Since 1.5.26
+ * Fix NSIS uninstall from the .MSI installer.
+
+ * Add Stack Frame logging for AMD64
+
+ * Add support for EWOULDBLOCK to cm_Analyze.  If the file 
+   server returns EWOULDBLOCK, retry the request every two 
+   seconds for up to the RDRtimeout.
+
+ * Reorganize the order of the includes to ensure that EWOULDBLOCK 
+   is not assigned the same value as EIO.
+
+ * Update CellServDB to GCO Public 25 Oct 2007
+
+ * Add additional validation and error handling code after 
+   each call to getSlot().  If an invalid slot is returned, 
+   return NONODE.  If the invalid slot is returned when 
+   extracting a data node, invalidate the tree.
+
+ * Modify compareKeys() to always perform a case-insensitive 
+   comparison and only perform a case sensistive comparison 
+   if the case-insensitive one matches.  This ensures the 
+   ordering is consistently reported.
+
+ * Add lock assertions to ensure that all calls are being 
+   performed with the correct locks being held.  There have been 
+   some crash reports that provide stack data that does not appear 
+   to be possible unless there is a race.  However, there are no 
+   obvious locations where the race is taking place and the test 
+   suite indicates that all of the correct locks are being held. 
+   We shall see what happens in the field.
+
+ * For consistency replace all calls to findKey in which the range i
+   s (1,numentries) with calls to getSlot().
+
+ * Optimize the depth search loop by testing the slot value in the 
+   for statement instead of forcing the loop to be broken later.
+
+ * Reorganize the locking for cm_BeginDirOp and cm_EndDirOp.
+   There are a number of locations where locks are obtained, dropped, 
+   and reobtained.  This reorganization attempts to accomplish several 
+   things:
+
+   (1) be optimistic for the most common case so it will be fast
+
+   (2) add consistency checks after each location where locks are 
+       dropped and re-obtained.  If we lose a race in cm_BeginDirOp 
+       and the bplus tree is out of date, retry until we get to a 
+       consistent state that we can use.
+
+   (3) Ensure that all operations take place with the correct locks.
+
+ * One of the issues that has become a serious problem since the 
+   addition of the local directory updates is that although cm_SyncOp 
+   synchronizes operations, it does not preserve the order of requests. 
+   This has always been a problem in that it has been possible for a 
+   request to fail to complete due to its worker thread's bad luck. 
+   When a request takes longer than the Windows SMB Redirector's timeout, 
+   the SMB Redirector tears down the SMB virtual circuit. 
+
+   When using the local directory updates it is really important that 
+   the directory update operations complete in the order that they were 
+   sent to the file server. If they don't, then the local directory state 
+   and the file server state will not match and the local directory state 
+   must be discarded which in turn forces a new read of the entire 
+   directory contents over the network. 
+
+   This patch adds a new cm_scache_waiter_t object that is used to store 
+   the current thread, buffer, and syncop flags within a waiters queue 
+   on each cm_scache_t object. If a thread is forced to sleep in 
+   cm_SyncOp, upon waking it will check to see if there are any other 
+   threads waiting that are attempting to perform a similar task ahead 
+   of it in the queue. If yes, the thread goes back to sleep. If not, 
+   it goes ahead and enters the cm_SyncOp conflict resolution block. 
+
+   This patch has the additional side effect of reducing the number of 
+   competing threads that must obtain the cm_scache_t mutex and process 
+   the cm_SyncOp conflict resolution block. As a result, the overall CPU 
+   utilization of the service and the clock time associated with processing 
+   requests will be reduced.
+
+ * assert that the cm_scache_t mutex is held when calling
+   buf_ForceDataVersion().
+
+ * rename findNode to leafNode in bplus_Lookup
+
+ * replace all OutputDebugString calls with osi_LogX calls
+
+ * modify bestMatch to special case the return values for leaf nodes.
+   If an entry is above or below the values available in the leaf node
+   return BTLOWER or BTUPPER instead of BTERROR.
+
+ * In insert and delete operations check for BTLOWER/BTUPPER and isleaf,
+   if true convert to either slot 0 or Max and perform the insertion.
+   This produces easier to read code when performing lookups.
+ * modify lock_AssertXXX macros to call osi_assertx() and provide a
+   descriptive message.
+
+ * the difference between osi_assert() and osi_assertx() is whether or not
+   a description is specified as part of the call.  When no message is
+   specified afsd_notifier() is called with a NULL msgp parameter.  This
+   results in a null pointer dereference during the EventLog() call.
+
+   As a result, none of the information describing the assertion is written
+   to the log file.
+
+   This commit sets a default message for use when no other message is
+   provided and it replaces all calls to osi_assert with osi_assertx and
+   adds descriptions.
+   
+ * Migrate B+ tree search key into thread local storage
+
+Since 1.5.25
+ * Fix an uninitialized variable in lana_IsLoopback() which 
+   could result in a random determination that a loopback 
+   adapter is not a loopback adapter.  This would result in 
+   a computed Netbios service name of %MACHINE%-AFS instead
+   of AFS.  This is a serious problem if the value computed
+   by the AFS Client Service and the client process pioctl
+   calls produce different results as it will result in a  
+   communication failure.
+
+ * Fix a crash in the B+ Tree code that results when a file
+   rename only results in a change of case.
+
+ * Fix the pioctl path parsing.  The previous algorithm 
+   broke the current directory of the client into two parts,
+   the TIDpath which represented the device root and the
+   relative path.  The problem is that this is not sufficient
+   from proper processing of symlinks and mount points.  
+
+   What is required is that the last component of the path
+   must not have the symlink or mount point be evaluated
+   whereas symlink and mount point evaluation must be performed
+   for the rest of the relative path.  Therefore, the path is
+   now split into three parts: TIDpath, intermediate path,
+   and last component.  
+
+   "fs examine" now reports the data of the symlink or mount
+   point object instead of the target and "symlink list" and
+   "symlink remove" now works.  The "Explorer Shell Extension"
+   menu now is displayed for symlink objects.
+
+ * More informative symlink.exe error messages.
+
+ * When the cmd.exe "del" command is used to remove a symlink,
+   not only was the link object removed, but the stat cache
+   object for the target was marked deleted.  This resulted
+   in cache corruption which would require the destruction
+   of the cache to correct.
+
+ * Add undocumented registry value, "OfflineReadOnlyIsValid"
+   which results in cached contents from read only volumes
+   to be treated as valid when there is no callback registered
+   and all servers are down or all instances are offline.
+
+   HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters
+
+ * Add documented registry value, "AcceptDottedPrincipalNames"
+   which is used to permit the acquisition of AFS tokens 
+   using Kerberos v5 principal names which include a dot in
+   the first component.
+
+   {HKLM\HKCU}\Software\OpenAFS\Client
+
+ * "fs uuid" does not require "AFS Client Administrator" group
+   membership to display the current UUID value.
+
+Since 1.5.24
+ * Update NSIS installer to version 2.30
+
+ * Update Wix installer to version 2.0.5325
+ * 64-bit KFW support:
+   - Network Identity Manager plug-in
+   - 64-bit aklog
+   - 64-bit krb5 enable afscreds.exe, afs server manager,
+     etc.
+
+ * Enable B+ tree Directory Search by default.
+
+ * NIM plug-in is now compatible with FILE: ccaches
+
+ * Install instloop.exe into Client/Programs/ even though
+   it isn't required.   Permit it to be used by organizations
+   that clone Windows systems.
+
+ * On a suspend, only drop callbacks for servers that 
+   are online.  If the server is offline, maintain the callback
+   until the server is once again available.
+
+ * Prevent against acquisition of a directory write lock when
+   there are no updates to be performed.  This was resulting 
+   in a write-lock leak which later on would lead to a deadlock.
+
+ * Add configurable file pre-fetch mode.  For files that match
+   the specified file extensions, pre-fetch the entire file into
+   the cache.
+
+   HKLM\SYSTEM\CurrentControlSet\Services\TransarcAfsDaemon\Parameters
+      (MULTI_SZ) PrefetchExecutableExtensions
+
+ * Fix the client_osi large integer support so that return values
+   can be properly assigned to large integer variables.
+ * Do not hold cm_scache_t mutex across cm_GetCell() calls 
+   since cm_GetCell() can block in a RPC.
+
+ * Add short file name support to B+ tree searches.
+
+ * Resolve a conflict between the desire to notify file servers
+   that the client workstation is suspending and the desire to
+   permit objects with valid callbacks when the client suspends
+   to continue to use those objects from the cache if the client
+   resumes without network connectivity.
+
+ * Fix stack variables to ensure that all buffers storing paths
+   can handle AFSPATHMAX (1024) characters.  Paths of 256 characters
+   would cause a stack overflow condition.
+
+ * On Vista, force afs_config.exe to run with the highest privileges
+   available to the end user.  For a user in the Administrators
+   group running under UAC, this will cause afs_config.exe to be 
+   be run with full Administrators privileges after the user 
+   approves the privilege escalation.
+
+ * More VNOVNODE handling issues.  If a dirty buffer cannot be 
+   written due to VNOVNODE, clear the buffer and ignore the error.
+   If a cm_scache_t object has been marked deleted due to a VNOVNODE
+   error, the next time the smb_fid_t object that references it is 
+   used return either NOSUCHFILE or NOSUCHPATH and close the
+   smb_fid_t object.  Subsequent attempts to use the smb_fid_t will
+   result in an invalid handle error.
+
+ * For Vista, set the RequestExecutionLevel of the NSIS installer
+   to "admin".
+
+ * For the build environment, support the generation of manifests
+   when using the CL1310 (VS .NET 2003) compiler/linker.
+
+ * There was a bug in OutputDebugHexString() which could overflow
+   a stack buffer resulting in unexpected process termination
+   of afsd_service.exe if the input Security Token contained
+   many bytes equivalent to the '%' char.
+
+ * Add directory lookup statistics to "fs memdump" output.
+
+Since 1.5.23
+ * Windows uses case-insensitive file name pattern matching
+   but AFS is a case sensitive file system.  The AFS3 directory
+   format is block based, uses network byte order and 
+   includes a hash table for fast case sensitive lookups.  
+   This causes several problems for the Windows AFS client.
+   (1) Traversing the directory blocks is cpu expensive
+   (2) A hash table miss does not indicate that the desired
+       entry does not exist.
+   (3) Determining whether a non-ambiguous inexact match or
+       the entry does not exist requires a linear traversal
+       of the entire directory.  
+   These issues often result in 100% CPU utilization.
+
+   These issues are addressed by building a modified B+ tree for 
+   each directory and then using the B+ tree for searches.
+
+   This feature is disabled by default.  To enable it set
+   the "BPlusTrees" registry value to 0x01 in the AFS Client
+   Service Parameters key.
+
+ * Correct a null pointer dereference in the symlink recursion
+   detection code.  (Introduced in 1.5.22)
+
+ * Add the Network Identity Manager AFS Provider to AMD64 
+   builds.
+
+Since 1.5.22
+
+ * A new registry value, "BlockSize", can now be used to adjust 
+   the size of the internal buffers used to store file data.  
+   The default is 4KB.  When set, the values 1..1024 specify
+   multiples of 4KB. Values > 1024 specify actual block sizes
+   and must be multiples of 4KB.  The actual block size in KB 
+   can not be larger than the chunk size which defaults to 1MB.
+
+    HKLM\SYSTEM\CurrentControlSet\Services\TransarcAfsDaemon\Parameters
+      (DWORD) BlockSize
+
+ * pts.exe and ptserver.exe built with -DSUPERGROUPS
+
+ * Service Manager shutdown hints have been added.  The hint 
+   specifies that it may take the AFS client service up to two
+   minutes to shutdown. 
+
+ * Fix the recursion detection feature introduced in 1.5.22.
+   The previous implementation broke the evaluation of paths
+   using ../path or ./path.   It also broke the evaluation of
+   symlinks to absolute paths.  For example, /afs/cell/path.
+
+ * Fix an uninitialized variable in cm_MakeDir that could result
+   in crash if the requested directory could not be created.
+
+ * Fix a the VolumeStatusNotification log messages to save
+   the input string in the circular log buffer so garbarge 
+   won't be output to afsd.log when the log is dumped.
+   
+
+ * Increase the SMB Maximum Path length to 260 characters
+   from 256 as that is what CIFS supports.
+
+ * On 64-bit Windows, use a unique description string for 
+   the 32-bit AFS Shell Extension.
+
+Since 1.5.21
+
+ * In the AFS Admin Library, replaced all of the 
+   Ubik_Call(XXX_RPC,...) calls with Ubik_XXX_RPC(...).  This 
+   allows parameter checking and proper type conversions to be
+   performed.  This is crucial when passing parameters that are
+   64-bit wide on systems in which 'long' is a 32-bit value.
+   Otherwise, the parameter list on the stack is interpretted
+   incorrectly and the function not only doesn't succeed but it
+   might corrupt memory and if lucky crash the application.
+  
+   The only program that we care about that uses this library 
+   is the AFS Server Manager.  Now it doesn't crash.
+
+ * Fixed smb directory searches for non-wildcard names.  The 
+   optimized function should not have set the bulk in progress
+   flag.  This would adversely affect later directory searches
+   that required a bulk search.
+
+ * Detect infinite recursions (up to 512 stat cache objects
+   in a chain.)  If an infinite recursion is detected, return
+   an error to stop the CIFS client from querying us forever.
+
+ * Executables executed out of AFS name space can have their
+   pages swapped out by Windows.  Those pages will be reloaded
+   when they are required.  However, if the cache manager no
+   longer has a callback and all of the file servers with 
+   the volume data are down, then the application will crash
+   due to the inability to read the required page.  
+
+   We now track the down time of each server.  If the callback
+   expires after the server that issued it went down and all
+   servers are down, we delay the expiration to permit the data
+   in the cache to be continue to be used by Windows or an 
+   application.
+
+ * The Windows AFS client has always had very poor performance
+   with regards to directory management.   In the case of 
+   directory updates caused by create, rename,and delete operations,
+   the AFS cache manager will now perform local directory updates
+   when possible in order to avoid re-reading the directory from
+   the file server.  This will be done in whenever both of the 
+   following conditions are true:
+
+   - the data version on the directory increased by one as a 
+     result of the operation
+
+   - all of the directory buffers necessary to make the change
+     are present in the cache
+
+ * The error message in the AFS Control Panel describing the 
+   need to be a Windows Administrator has been replaced with
+   a message describing the need to be in the AFS Admins Group.
+
+ * If the vldb server list is empty when attempting to evaluate
+   a cell mountpoint it was possible for a crash to occur.  This
+   can only happen if there is an existing mount point and the
+   is a failure attempting to load the server list from the 
+   CellServDB file or via AFSDB queries.
+
+ * dirty buffers only have their dirty bytes stored to the file
+   server instead of the entire chunksize
+
+ * the default chunksize has been increased from 128KB to 1MB
+   
+
+Since 1.5.20
+
+ * changed the enum values for cm_serverRef_t state info to use a 
+   private name space to avoid collisions (srv_)
+ * added a srv_deleted state for cm_serverRef_t objects.  This 
+   state is set when cm_FreeServerList() is called with the 
+   CM_FREESERVERLIST_DELETE flag set.  cm_FreeServerList() may
+   not always delete the cm_serverRef_t from the list if it is
+   still in use by another thread.  the srv_deleted state means
+   the object's contents are no longer valid and it must be 
+   skipped.  It will be deleted the next time the object is 
+   freed and the refcount hits zero.
+ * the srv_deleted state is also used when a file server reports
+   either VNOVOL or VMOVED instead of marking the cm_serverRef_t
+   as offline.  This is done to prevent additional usage of the 
+   stale vldb data while waiting for the update volume request
+   to complete.
+ * added a state field to the cm_volume_t object (enum volstate 
+   vl_ name space) that maintains the state of the volume based
+   upon the states of all of the cm_serverRef_t and cm_server_t
+   objects.
+ * modified cm_UpdateVolume() to set the state of the cm_volume_t
+   RW, RO, and BK to either vl_alldown or vl_online.  There can't
+   be any other states because cm_UpdateVolume() destroys any  
+   previous knowledge we might have had regarding busy or offline
+   volume status
+ * modified cm_UpdateVolume() to update the volume name in the 
+   cm_volume_t to the volume base name if the previous value was 
+   a volume ID.
+ * modified cm_FollowMountPoint() to check to see if the volume
+   name is a volume ID and if so call cm_GetVolumeByID instead 
+   of cm_GetVolumeByName.  This ensures that volume IDs are always
+   looked up as numeric values.  There is no longer a need to 
+   maintain a separate cm_volume_t containing the string representation
+   of the ID value.
+ * Added a flags parameter to cm_GetVolumeByName() and cm_GetVolumeByID().
+   The first flag is a "CREATE" flag which is set by all existing
+   calls.  The flag is not set by calls to cm_GetVolumeByID() from
+   the server probe code when volume status is being updated.  We 
+   do not want the server probe operation to result in additional 
+   turnover in the cached volume data.  The second flag is NO_LRU_UPDATE 
+   which is set when the server probe code updates the volume status.
+   This flag will be used to prevent the server probe operation from
+   changing the order of the least recently used queue.
+ * Modified cm_GetVolumeByName to ensure that only one cm_volume_t is 
+   allocated for a given set of normal, readonly, and backup volumes
+   regardless of whether or not the volume is accessed via name or 
+   ID number.  The cm_volume_t namep field is always the base name
+   of the volume. 
+ * Added a new volume state, vl_unknown.  This state is used as
+   the initial state for all cm_volume_t when the cache manager starts, 
+   for each cm_volume_t at creation, and for each cm_volume_t when
+   recycling.  The cache manager does not know the state of all 
+   volumes in the world, only those that are in the cache and for
+   which it has queried the VLDB and hosting file servers.
+ * modified cm_GetVolumeByName() to initialize the state of a 
+   volume to vl_unknown.  The actual state will be set when a 
+   cm_VolumeUpdate() call completes successfully.
+ * changed name of scache hash table variables to avoid ambiguity
+   when adding hash tables for volumes
+ * fix a buffer overrun in sys\pioctl_nt.c  pioctl().
+ * modified cm_UpdateVolume() to handle the case in which there is
+   no RW volume but there is are RO volumes for a given base name. 
+   This is done by querying for the ".readonly" volume name if the 
+   base name does not exist in the VLDB.  We never query for the
+   .backup name because under the current usage model a .backup 
+   volume may only exist on the server that the read-write volume
+   is located.  If there is no RW volume, there can be no .backup.
+ * Added four hash tables for cm_volume_t objects to improve the 
+   search time of cm_GetVolumeByID(), cm_GetVolumeByName() and
+   cm_ForceUpdateVolume(). One each for Name, RWID, ROID, and 
+   BKID.  Three ID hash tables are necessary as long as it is
+   desireable to maintain a single cm_volume_t containing all
+   of the related RW, RO, and BK volume data.  Having the RW and
+   RO volume data in the same object is necessary for the 
+   implementation of cm_GetROVolumeID() which returns either the
+   RO or RW ID depending upon the existence of RO volume instances.  
+ * Added a volume LRU queue so that volume reuse becomes fairer.
+   This does not replace the all Volumes list which is used when
+   it is desireable to walk a list of all the volumes whose order
+   is not going to change out from underneath you which makes it
+   safe to drop the cm_volumeLock.
+ * handles volume hash table updates where volume name to 
+   volume ID number changes.  The volume name remains 
+   constant in the cm_volume_t.  if a vos rename is performed, 
+   the name of the volume will change and the volume IDs will be 
+   updated.  Subsequent access to the old volume ID will create a 
+   new cm_volume_t with the new name.
+ * Added a daemon thread operation to query the state of volumes
+   listed as busy or offline.  cm_CheckBusyVolumes() calls 
+   RXAFS_GetVolumeStatus() for each volume ID that is marked vl_busy 
+   or vl_offline.   If the volume is now online, the status on the
+   volume is updated.  The default period is 600 seconds.  This can 
+   be configured with the BusyVolumeCheckInterval registry value.  
+ * Added prototype for smb_IoctlPrepareRead() which was missing a
+   return type in the function definition.
+ * Added volume id lists to the cm_server_t.  These lists are
+   allocated in blocks of ~32 IDs.  When a cm_PingServer() 
+   detects a change in server state, the state of the cm_volume_t
+   is updated.  
+ * Added volID to the cm_serverRef_t object.  volID is used
+   to identify the volume for which the object is a referral.
+   cm_FreeServerList() uses the volID to remove the volume 
+   from the cm_server_t.
+ * In cm_Analyze, when VNOVOL or VMOVED are received, 
+   call cm_ForceVolumeUpdate() to force a refresh of the volume 
+   location data.
+ * Added cm_VolumeStatusNotification() which is used at the moment
+   to log volume status changes to the trace log.  It will also
+   be used as the access point to the File System Filter driver
+   notification engine.
+ * Added an all cm_scache_t list to cm_data.  This replaces the use
+   of the stat cache LRU queue when we need to enumerate all 
+   entries.  The LRU list order is not static and when using it to 
+   enumerate all entries it can result in items being missed or
+   items being processed more than once.
+ * Modified cm_Analyze(). Instead of reseting the busy or offline
+   state of a volume and forcing a retry of the operation
+   cm_Analyze will defer to the background daemon thread that will
+   update the state once every 600 seconds.
+ * Added the automatic generation of a Freelance ".root" read-write
+   mountpoint that refers to the root.afs volume of the workstation
+   cellname at the time the mountpoint is created.
+ * re-write cm_Analyze to make better use of the known volume
+   status.  VL_Server queries cannot result in CM_ERROR_ALLOFFLINE
+   messages.
+ * renamed cm_CheckBusyVolumes to cm_CheckOfflineVolumes.  
+   busy volumes will be reset to srv_non_busy by the function
+   but there is no mechanism for querying the busy state other
+   than by attempting to access the resource.
+ * cm_Analyze will query the state of an offline volume before
+   deciding whether or not to retry when all volume instances
+   are offline.
+ * the algorithm used after an IP address list change detection
+   has been modified.  we now check the state of the VLDB servers,
+   then reset the rx connections, and finally check the state of 
+   the file servers.  Previously we flushed the rx connections 
+   and then checked the servers in whatever random order they 
+   were first discovered.
+ * fix the volume status reported by "fs examine"
+ * various improvements to the AFS Network Identity Manager Provider.
+   - Don't access freed objects after the window has been destroyed.
+   - Write back the AFS cell list in the identity configuration 
+     even when its empty.
+   - Disable all use of the provider when AFS is disabled for a 
+     particular identity.
+ * Fix cm_cell_t leak.  When evaluating a mountpoint that uses an
+   alias instead of the full cellname, double check the full cell
+   name and see if we have a matching cell before allocating a new
+   one.
+ * Dump more data with "fs memdump". All volumes and scaches and
+   now cells.
+ * Reverse the order of the all cells list.  This ensures that
+   the workstation cell is always first in the list.
+ * If we recognize the server from which a callback revoke was
+   received, then we can ensure that we only invalidate the status
+   information for cm_scache_t objects belonging to that cell.
+ * When building for amd64, use APPVER 5.02 as we do not support
+   64-bit Windows 2000 and explicitly state the machine type in
+   the link flags.  
+ * no longer treat VMWare network adapters as equivalent to a 
+   loopback adapter.  For some unknown reason, publishing the "AFS"
+   netbios name on them frequently results in a name collision 
+   error.
+ * Use read locks whenever possible instead of write locks when
+   walking the allCellsp list.  This permits better use of multiple
+   CPUs.
+ * In 1.5.20 a bug was introduced by the fake status when PRSFS_READ
+   is not present on the directory optimization.   It would report
+   mount points and directory objects for which there was no
+   status information as a zero length file.  Instead we can use 
+   the vnode number of the object to determine if it should be
+   considered to be a directory or a file.  If it is odd it is a
+   directory; even it is a file.
+ * Give Back Callbacks to the file servers in response to suspend
+   and shutdown power management events.  Only give up callbacks
+   to UP servers and do so with a very short RX dead timeout.
+   (10 seconds)
+ * Fix a race condition in the SMB FID cleanup code that could 
+   result in a stat cache mutex never being released.
+ * Fix the graphics files that are installed as part of the 
+   IBM Administrators Guide.
+ * Change the behavior of pioctl path parsing to not follow 
+   symlinks or mount points during evaluation.  This results in
+   the FID being the symlink or mount point and not the object
+   they point to.  This is consistent with the behavior of the 
+   UNIX client.
+
+ * Enable AFSDB record lookup for command line tools such as
+   "fs" and "vos".
+
+ * CellServDB update 2007-07-05
+
+ * Added a Volume Status Plug-in Interface that permits third parties
+   to receive notifications when the volume state changes occur.
+
+ * Ensure that all writes to the afsd_alloc.log file use CR-LF.
+
+ * Prevent the afsprocmgmt.dll from being unloaded while the 
+   background thread it starts is running.
+
+ * Avoid a race condition when closing smb_fid_t objects.
+
+Since 1.5.19
+ * fix install path of IBM Quick Start Guide when installed by
+   the Wix installer
+
+ * fix the client so that it can write into directories with
+   only 'li' permissions.
+
+ * fix installation of 32-bit Shell Extension for 64-bit systems.
+   Install it under its own HKCR keys.
+
+ * modify the wix installer to remove and upgrade install packages
+   with the same version number.  
+
+ * when flushing volume location data every two hours or in 
+   response to "fs checkvolumes", also flush the mount point 
+   links in order to force their re-evaluation.
+
+ * aklog was copying an uninitialized buffer as part of the 
+   foreign cell automatic pts registration
+
+ * when obtaining directory listings, check for read permission
+   on the directory.  If read permission does not exist, fake the
+   status information for the directory entries.  This improves
+   performance, prevents the client from pounding the file server,
+   and prevents leakage of cached status information.
+
+ * "fs getcacheparms" output was incorrect.
+
+ * NetIdMgr AFS Provider should only automatically add token 
+   acquisition for cell foo.com if the realm of the cell matches
+   the realm of the identity.
+
+ * Fix a null pointer dereference in cm_MergeStatus()
+
+Since 1.5.18
+
+ * network identity manager provider:
+
+   - Correct for the fact that pr_CreateUser tampers with the 
+     contents of the username input buffer.
+
+   - Take into account that the krb4 credential data structure
+     does not have separate realm fields for the user and service.
+     When krb524 is used with a cross-realm ticket, the realm
+     describes the service not the user.  
+
+ * Many integrated logon changes:
+
+   - Fix eventlog reporting.  Do not attempt to log an event 
+     if the event source registration fails.  Use DebugEvent0 
+     instead of DebugEvent when there are no parameters.
+
+   - Modify the LOOKUPKEYCHAIN macro to recognize ERROR_MORE_DATA 
+     errors.
+
+   - Fix the reading of Domain specific configuration for 
+     LogonScript and TheseCells.  Previously the dwSize value was 
+     being overwritten so that subsequent RegQueryValueEx call 
+     would fail.
+
+   - Fix a memory leak in the TheseCells reading code.
+
+   - Add support for Domain specific "Realm" specification.  The 
+     realm is the realm to be appended to the username.  When 
+     logging in as a domain or to the local machine, the specified 
+     "Domain" name is not going to be a valid realm name.
+
+   - Construct a proper principal name based upon the domain 
+     specified realm for use in obtaining tokens with KFW.
+
+   - If the domain specified "TheseCells" list includes the 
+     default cell, do not obtain tokens twice.
+
+ * An unprotected call to the Kerberos v5 function, 
+   krb5_free_context(), can result in an invalid memory access
+   exception if the contents of the krb5 profile, krb5.ini, cannot
+   be parsed correctly.  The error is located within the afskfw
+   library which is used by afscreds.exe, afssvrmgr.exe, and 
+   afslogon.dll.  When the error is triggered within afslogon.dll
+   a blue screen condition can occur when the winlogon.exe system
+   process terminates unexpectedly.
+
+Since 1.5.17
+
+ * Do not stop the afs client service with an assert
+   if the cell name cannot be determined when responding
+   to a "fs whereis" command.
+
+ * Integrated Logon (afslogon.dll).  No longer attempt 
+   to preserve Kerberos 5 tickets for the logon session
+   as that job is now supported by KFW 3.1 and above.
+
+ * The Network Identity Manager plug-in will attempt to
+   remove expired service tickets from the cache.
+
+Since 1.5.16
+
+ * CellServDB update - GCO Public CellServDB 09 Mar 2007
+
+ * AFS Server Manager and AFS Account Manager data cache
+   moved from HKCU\Software\TransarcCorporation to 
+   HKCU\Software\OpenAFS to prevent crashes due to data
+   format changes.
+
+ * Reduce the default UP server probe time from 10 minutes
+   to 5 minutes to match UNIX.  This will not solve the NAT
+   port mapping timeout issue because most NATs default to
+   a value less that 5 minutes and this value ensures that
+   the afs client server will start probes 5 minutes after
+   the last probe set ended.  The probe period for any one
+   server is therefore longer than 5 minutes.  The more
+   servers in the list the longer the time between probes.
+
+ * Before marking a server as down in cm_Analyze, retry the
+   request using a new rx connection to the server.  If the
+   cache manager is behind a NAT, it is possible that the 
+   response from the server is being sent to the original   
+   address:port from which the rx connection was established.
+   This will appear to the cache manager as the server being
+   down when in fact it is not.  Forcing the use of a new rx  
+   connection will result in the server responding to the    
+   most recent address:port assigned to the client by the NAT.
+
+   If the server is in fact down, it will simply take a little
+   longer to notice it.   
+
+Since 1.5.15
+
+ * Removing a directory that contained entries was failing with
+   the wrong error code being returned to the CIFS client.
+
+ * rxdebug -long 
+
+ * rxdebug exponential back-off.  don't take down a server that
+   is already struggling to respond.
+
+ * Network Identity Manager plug-in registers help on the Help
+   menu if it is supported by NIM.  (KFW 3.2 and above)
+
+ * Plug-n-play networking did not always work after coming back
+   from a Windows Suspend.  The AFS client service failed to 
+   re-compute the LAN adapter to bind to and instead attempted
+   to bind to all LAN adapters.  This would polute the public
+   network with the name "AFS" which could lead to conflicts 
+   between machines.
+
+ * Build installers using Microsoft Hotfixes provided at
+   http://tinyurl.com/243svk for Visual Studio C RunTime Library
+   Daylight Savings Time issues.  
+
+ * "fs checkserver" does not require admin privileges unless 
+   the probe interval is being changed.
+
+Since 1.5.14
+
+ * A reference leak was discovered in the mountpoint traversal 
+   functionality which resulted in cm_volume_t objects not becoming
+   eligible for re-use.  This will trigger a panic condition when
+   more than the maximum number of volumes is accessed.
+
+ * Fixed the success test for the "fs memdump" operation.  Success
+   is now reported as such.  Added cm_volume_t object information 
+   to the dump file.
+
+ * A data corruption error has been fixed.  Write requests
+   queued for background processing were not retried upon failure.
+   This leads to inconsistencies between the contents of the file
+   in the local cache and the contents of the file on the file 
+   server.  
+
+   The implemented fix is to re-queue any request that has failed
+   due to timeout, volume busy, volume offline, server busy, or
+   server offline.  Requests are not processed while all servers
+   for a volume are inaccessible.  When servers become accessible
+   the background request will be retried.
+
+   In addition, if a background write fails, do not mark the buffers
+   as clean.  Failure to preserve the dirty flag prevents the buffers
+   from being written to the file server in the future.
+
+   This fix does not address the possibility that the credentials
+   necessary to perform a write request might expire between the
+   time the request is queued and when the request can be processed
+   due to server accessibility.
+
+ * The Freelance volume does not support per user ACLs.  The
+   cm_HaveAccessRights function did not handle this special case.
+   Requests for privileges greater than read|lookup would result
+   in afsd_service.exe entering an infinite loop.  ISOBuster is
+   known to cause this behavior.
+
+ * When deleting files, the SMB Server would attempt to obtain
+   the access permissions for the parent directory instead of 
+   for the file itself.  This would result in an incorrect 
+   assessment of whether or not the file can be deleted.
+
+ * The Network Identity Manager AFS plug-in has had its string
+   tables updated for consistency with the language used by NIM.
+   All credentials are referred to as credentials instead of tokens.
+   Drop-down combo boxes now in fact drop down.
+
+ * The AFS Salvager was not properly being built on Windows.
+   This is relevant only if the AFS servers are in use.
+
+ * The default signal handlers for the AFS servers incorrectly
+   processed SIGQUIT.  Instead of stopping the server, an
+   exception was raised.
+
+ * Fix another volume refcount leak.  This one was triggered by
+   an inability to contact the vlservers in order to update the 
+   file server list.
+
+ * Fix checklist control used by the drive mappings tabs in 
+   afscreds.exe and afs_control.exe.
+
+ * Improve output of "fs memdump" related to buffer management.
+
+ * Fix refcount leak of cm_buf_t objects when prefetching buffers
+   already in the process of being fetched.
+
+ * Improve cache performance by computing the buffer hash table
+   size based upon the number of buffers so that the average 
+   number of entries in a bucket is seven.
+
+ * Improve cache performance of read/write data by locally 
+   updating the dataVersion of all buffers associated with the
+   file on each StoreData or StoreStatus operation provided that
+   the dataVersion was incremented by one and the dataVersion of
+   the buffer matched the original dataVersion of the cached 
+   status information for the file.
+
+ * When recycling cm_scache_t objects, make sure that we 
+   clear all of the previous fields.  It is no longer the
+   case that we can assume that the stat cache object is being
+   obtained only after a successful FetchStatus call.  
+   InlineBulkStatus will allocate stat cache objects for which
+   the no status information is available.
+
+ * When a file is being opened with the OPEN_ALWAYS disposition,
+   do not require write permissions when the file already exists
+   unless of course the file is being opened requesting write 
+   access.
+
+ * When a file has been opened for read-only access, if the 
+   application requests an exclusive lock, obtain a read-lock
+   instead of a write-lock.  The purpose of the exclusive lock
+   in this situation is to prevent changes to the file and the
+   full file read lock will provide this guarrantee.
+
+
+Since 1.5.13
+
+ * Enforce Unix Mode Write bit to prevent file deletion of read only
+   files.
+
+ * The CIFS READ and LIST permissions use the same value 0x0001.
+   When a directory is being accessed, check for PRSFS_LOOKUP 
+   instead of PRSFS_READ.
+
+Since 1.5.12
+
+ * Fix computations of short names of mount points.  They were
+   broken as part of the directory search optimization. (1.5.13a)
+
+ * When all buffers are in use, periodically sleep the threads
+   waiting for a buffer to become free while the global buffer
+   lock is not being held in order to permit those threads that
+   can free buffers to do so.
+
+ * Power Management improvements.  Maintain a global flag that 
+   specifies whether or not the service is in a suspend state.
+   Do not panic if Netbios() returns NRC_BRIDGE meaning that the
+   lana is no longer valid.  Instead, stop the listener threads
+   and if all listener threads are stopped, reset the lana_list.
+   Allow the cm_Daemon() thread to periodically check the state
+   of the smb listeners.  If they are all stopped and the service
+   is not suspended, attempt to restart them.  If there are no valid
+   lanas, return to the stopped state.
+
+ * CreateX and NTCreateX use cm_CheckNTOpen() to test whether or not
+   the user is permitted to obtain read or write locks.  This function
+   would obtain the lock and then drop it returning whether or not 
+   the lock could be obtained.  If the lock was in fact required,
+   CreateX/NTCreateX would then obtain it with cm_Lock().  The problem
+   of course being that this pattern results in three RPCs to the 
+   file server (lock, unlock, lock).  This is reduced to one RPC by
+   implementing cm_CheckNTOpenDone() which frees the allocated byte
+   range lock from cm_CheckNTOpen() after the cm_Lock() call is 
+   performed.
+
+ * Optimize the SMB FindFirst processing for the case in which there
+   are no wildcards.   If a cm_Lookup succeeds, generate a response
+   from the stat cache entry we have a callback for.  Its cheaper 
+   than walking each buffer of directory data associated with the
+   directory stat cache entry when we have thousands of directory
+   entries to search.
+
+ * Increase the SMB Ioctl MaxData size to support larger token sizes
+
+ * Disable autorun of the AFS Server Wizard when the AFS Server is 
+   installed.
+
+ * Add AFS Server service dependencies on tcpip and PNP_TDI
+
+ * Remove the AFS Server Configuration Tool shortcut
+
+ * Add Freelance mode awareness to AFS Server Configuration Tool
+
+Since 1.5.11
+
+ * Unlike previous versions of the OS, Vista performs a shutdown on
+   the Microsoft Loopback adapter just like it would on a real adapter.
+   This causes the smb_Listener threads to trigger a panic during a
+   suspend/hibernate power event.
+
+   The fix is to unbind from the network adapters in response to a
+   suspend/hibernate power event and then rebind to the adapters
+   when a resume power event is received.  Note that the resume events
+   are not reliably delivered so it is possible the afs service will
+   not be accessible.  However, this is the best we can do.
+
+ * don't allow environment variables we set in afslogon.dll to be 
+   inherited by child processes
+
+ * force an rx connection reset if VICECONNBAD or VICETOKENDEAD are
+   received
+
+ * The old dirty buffer synchronization algorithm had a buf_IncrSyncer
+   thread walking the all buffer list periodically searching for dirty
+   buffers to write to the file server.  This had several negative
+   results.  The algorithm ate up ever increasing amounts of CPU time
+   even when AFS is idle as the size of the cache increases.  Also,
+   buffers were written to the file server in an order based upon the
+   original buffer allocation which has nothing to do with the order
+   in which the buffers became dirty.
+
+   The new algorithm maintains a dirty buffer list.  Items are added
+   when the buffer is originally marked dirty.  A buffer is only
+   removed from the list by the buf_IncrSyncer when the buffer is no
+   longer dirty.  If the list is empty the thread goes back to sleep
+   immediately without additional processing requirements.
+
+Since 1.5.10:
+
+ * Enable renaming of directories from the Explorer Shell when
+   Offline Folders is enabled
+
+ * An error is reported in response to the SMB ReceiveCoreFlush 
+   request when an error has not occurred.
+
+Since 1.5.9:
+
+ * optimize dirty buffer flushes in response to suspend operations
+   do not flush if only loopback adapter is installed
+   do no retry dirty buffer writes
+
+ * do not reset netbios when performing loopback checks.  doing
+   so will break the existing lana bind
+
+ * remove a deadlock in smb3.c QPathInfo 
+
+Since 1.5.8:
+
+ * Add NetIDMgr AFS Plug-in
+
+ * "Show Tray Icon" checkbox removed from afs_config.exe
+
+ * Disable DNS Registrations for the Loopback Adapter and make sure
+   that Netbios is turned on.
+
+ * A reference count leak on stat cache objects was fixed
+
+ * For debugging, tread ids of writers are now tracked on locks
+
+ * Corrected an incorrect lock that was being held but not
+   freed in a rare error case
+
+ * Changed trace log end of line to CR-LF so it can be read
+   with notepad.exe
+
+ * modify the buffer synchronization thread to write all dirty
+   buffers and sleep only when there is no work to be done
+
+ * improve behavior of cache manager when large numbers of 
+   temporary files are being created by multiple clients within
+   the same directory.
+
+ * do not permit dirty buffers that belong to deleted files
+   to be written to the file server.  its a waste of bandwidth
+
+ * do not leak stat cache references when the file server
+   returns VNOVNODE
+
+ * afscreds: do not permit an attempt to obtain tokens if the
+   afs service could not be started.   this was causing stack
+   overflows on Vista after resuming from a suspend
+
+Since 1.5.7:
+
+ * better handling of dot directory
+
+ * fs sq and fs mkm now behave as on UNIX
+
+ * add license to installers
+
+ * Return Invalid Parameter error for unknown InfoLevels in
+   SMB Tran2 Search Directory.
+
+ * Correctly use WSAStartup and WSACleanup within the RX library
+
+ * Check that afsd_service.exe is running before performing
+   a pioctl call.
+
+ * Force AFS Shell Extension to load resource DLL using 
+   afs_shl_ext.dll as a base name.
+
+ * (Wix) install afs_shl_ext_XXXX.dll and afs_creds_XXXX.dll in 
+   OpenAFS\Client\Program
+
+ * Fix SMB_SET_FILE_END_OF_FILE_LENGTH
+
+ * Do not panic if the maximum number of volume entries are in use
+   and one of them can be recycled.
+
+Since 1.5.6:
+
+ * Fix the code that reads the backconnnectionhostnames value
+   so that there is not an uninitialized variable
+
+Since 1.5.4/1.5.5:
+
+ * integrated logon could cause winlogin.exe to blue screen windows
+   if it was called with a domain that does not exist on the machine.
+   this is possible during a sysprep.
+
+ * corrections to cm_buf_t handling to ensure that buffers are
+   removed from queues before they are freed and that holds are
+   obtained on the next buffer in a chain before releasing the
+   current one.
+
+ * do not generate MessageBox dialogs on network errors.  they 
+   cause more trouble then they are worth.
+
+ * move GlobalAutoMapper into a separate thread so that it does
+   not prevent service startup if the WNetAddConnection2 call
+   does not return.
+
+ * restrict hard dead and connection timeouts to the CIFS Session
+   Timeout value.  This is being done to try to prevent virtual 
+   circuits from being destroyed prematurely.
+
+ * Fix the code that writes the backconnectionhostnames value
+   to ensure that the data buffer is written with the correct 
+   length.
+
+ (there were no windows specific changes between 1.5.4 and 1.5.5)
+
+Since 1.5.3:
+
+ * Corrections to the Integrated Logon functionality that permits
+   Kerberos 5 TGTs to be communicated into the user session.  The
+   transfer is now more secure and succeeds when the user does not
+   have read permission to the %SystemRoot%\TEMP directory.
+
+ * NSIS installer updated to version 2.18
+
+ * WiX installer updated to version 2.0.4221.0
+
+ * Updates to the IFS functionality for 64-bit correctness and 
+   permit compilation.  The IFS functionality works for pioctl()
+   operations but not much else at this point.
+
+ * A major re-write of the OpenAFS implementation of the CIFS Tran2
+   query and set functions.  
+
+ * Ignore the Windows CIFS client session timeout entirely.  Timeout
+   only after the AFS Hard Dead Timeout period expires.
+
+Since 1.5.2:
+
+ * move headers, libraries, and samples from OpenAFS\Client to 
+   OpenAFS\SDK
+
+ * remove the auto-registration of AFS IDs for foreign cells
+   from integrated logon.  this permits afslogon.dll to avoid 
+   initializing the RX library.  afslogon.dll is a network 
+   provider library and as such it is loaded into all applications
+   which perform a CreateProcessAsUser call.  Initializing the
+   RX library spawns background threads to listen for inbound
+   packets.  When the network provider is unloaded from the 
+   process, the RX library does not cleanup the threads.  If they
+   continue to execute after the library is unloaded, the process
+   will crash.
+
+ * implement inline bulk status calls.  this will significantly
+   improve the performance of directory listings.
+
+ * prevent a crash when evaluating mountpoints to volumes that do not
+   exist
+
+ * new command: fs uuid [-generate]
+   displays the current uuid and allows a new one to be generated
+   on the fly without restarting the afs client service.
+
+ * fix the 64-bit installers to properly document the install 
+   location
+
+ * move help files to the proper location so they can be located by
+   the system tray tool and the control panel.
+
+ * "over quota" and "disk full" errors were not being reported to the 
+   caller.
+
+ * largefile support has been added.  Files greater than 31-bits can no
+   longer be written to file servers which do not support large files.
+   When file servers support large files, files up to 64-bits can be
+   read or written.
+
+ * cm_SyncOp could return with the input buffer unlocked upon error
+   which would result in a panic condition.  This bug was introduced
+   in 1.4.1.
+
+ * vlserver failover when freelance mode did not work.  This prevented
+   the root.afs volume from being loaded if the first vlserver could
+   not be reached.
+
+Since 1.5.1:
+
+ * A bug in the CIFS Standard Info response packet caused directories
+   to appear as standard files.  This prevented Microsoft Vista from
+   being able to walk the AFS directory tree.
+
+ * Mount points must be reported as directories in response to 
+   Query Path Info operations.
+
+ * A deadlock was detected when performing "fs flushall" if the 
+   file server reports VNOVNODE.   The scp->createBufferLock is 
+   already held by the current thread and there is no mechanism 
+   to propagate the knowledge.  Therefore, an alternate mechanism 
+   for clearing the cache must be developed.  A new function 
+   cm_RecycleSCache(scp,flags) has been extracted from 
+   cm_GetNewSCache().  This function performs the task of recycling 
+   an cm_scache_t object.  When called from cm_GetNewSCache() with 
+   no flags the expectation is that there are no associated buffers 
+   that are queued to be read or written.  When called from 
+   cm_Analyze() with the CM_SCACHE_RECYCLEFLAG_DESTROY_BUFFERS
+   flag, any queued buffers will be de-queued and marked as if 
+   the operations were performed so the data can be discarded.
+
+ * CM_ERROR codes were logged as "unknown" by cm_Analyze.
+
+ * In response to VNOVNODE, the parent is only discarded if the current
+   cm_scache_t is not a directory.
+
+ * In the Ioctl FlushFile and FlushVolume functions, there were no
+   checks to protect against flushing the Freelance SCache entries.
+
+ * In FlushFile, the wrong cm_scache_t object was being released.
+
+ * In cm_GetNewSCache, do not allow Freelance SCache entries to be
+   recycled.  Choose a new entry if cm_RecycleSCache fails.
+
+ * Speed up the performance of the cache manager by not 
+   holding the smb_fid_t mutex across calls to cm_SyncOp 
+   and AFS RPCs.
+
+ * Ensure that all smb_fid_t flag references are protected.
+
+ * Remove a deadlock between smb_fid_t mutex and 
+   smb_rctLock introduced in 1.4.1.
+
+ * Fix aklog AFSID lookup to use not send the realm
+   name when the realm is the local realm for the 
+   cell.  The PT Server doesn't strip the realm 
+   name when it is the local realm.
+
+ * Treat "\\afs\*." as an alias for "\\afs\all" 
+
+ * Dynamically adjust the priority of server threads
+   based upon the age of the CIFS request that is 
+   being processed.  The priority is bumped one level
+   for every 15 seconds of processing time.
+
+ * The original openafs contribution mis-used the 
+   cm_GetCallback function.  This function should only
+   be called as a side effect of a call to
+   cm_SyncOp(CM_SCACHESYNC_NEEDCALLBACK).  The way it
+   was being called results in a FetchStatus RPC being 
+   performed even when the client already has a valid
+   callback and does so in a manner that destroys the
+   synchronization of the threads that are calling 
+   cm_SyncOp.  If nothing else this results in a 
+   significant performance penalty.
+
+ * More changes to cleanup of smb_vc_t objects in
+   order to prevent race conditions.
+
+ * Reduce the amount of Power Management event logging
+   to afsd_init.log
+
+ * If the client detects that the IP address has 
+   changed, force the use of new RX connections.  This
+   enables the file server to recognize that the client
+   has moved.
+
+ * Remove a race condition and deadlock associated 
+   with cleanup of smb_vc_t objects.
+
+ * Fix the ANSI filename support.  One function that
+   required it was missing the translations.
+
+Changes not present in 1.4.1 and since 1.5.0: 1.5.1 released 
+(24 April 2006)
+
+ * Add a DllMain() function to afspthread.dll.  Perform
+   cleanup of thread local storage, rx queues, critical
+   sections, event handles, etc.  This was implemented
+   to avoid crashes in afspthread.dll when applications
+   which load/unload the dll attempt to terminate.
+
+ * Lock request behavior has been altered.  As of this 
+   release a locally allocated lock will be used whenever
+   the volume is RO or the requesting user's permissions 
+   are 'rl'.  This will allow end users to execute programs
+   from RW volumes when they do not have the 'k' privilege.
+
+   Note that a recent discovery indicates that the 'k' bit
+   is only supposed to control the ability to obtain read 
+   locks.  Write locks are to be controlled by the 'w' and 
+   'i' privilege bits.  
+
+ * Code has been added to enable the cache manager to be
+   able to obtain the AFSID of the authenticated user.
+   This is required to be able to determine when "Insert"
+   privileges should apply.  AFS considers a file to be
+   a new file whenever the owner's AFSID matches the 
+   AFSID of the user.  The current implementation relies
+   on the name specified during the SetToken call to be
+   correct.  This will be replaced in the future with a 
+   new RPC that allows the AFSID of the authenticated 
+   user to be obtained.
+
+ * A 32-bit-tools installer for use on 64-bit systems 
+   is now available.  These tools are for use with 32-bit
+   versions of Kerberos for Windows or JPSoftware's 4NT.
+
+Since 1.4.1 rc10: 1.4.1 final released (9 April 2006)
+
+ * Remove the use of the "active_vcp" variable.  This variable
+   no longer serves any useful purpose and was the cause of
+   race conditions that produced under counts of the smb_vc_t
+   references.
+
+ * Change default minidump output to include data segments
+
+ * restore access to cm_IoctlGetVolumeStatus and
+   cm_IoctlSetVolumeStatus calls for AFS pioctl operations.
+   Still need to figure out why they are being called
+   for SMB/CIFS IOCTL operations instead of Trans2GetFileInfo.
+
+Changes not present in 1.4.1: 1.5.0 released (16 Feb 2006)
+
+ * Update build system to include the "sys_name" in the 
+   obj and dest paths.
+
+ * optimize the number of calls to obtain the smb_user_t for a 
+   smb virtual circuit.
+
+ * add logging of server addresses, status and capabilities when
+   pinging the server.
+
+ * prevent multiple threads from pinging the same server simultaneously.
+   instead, threads block and then use the result of the ping that was
+   already taking place.
+
+ * Add registry values to allow the defaults for daemon checks to be altered
+   at startup.  Log values to afsd_init.log.
+
+   daemonCheckDownInterval
+   daemonCheckUpInterval
+   daemonCheckVolInterval
+   daemonCheckCBInterval
+   daemonCheckLockInterval
+   daemonCheckTokenInterval
+
+ * Add EventLog messages for transitions in fs crypt state.
+
+ * Byte range locking (when locks will be obtained from the
+   is still under discussion)
+
+ * 64-bit Windows operating systems now supported 
+   (XP SP2 64-bit, 2003 SP1 64-bit, 2003 R2 64-bit)
+   This is a native 64-bit implementation of OpenAFS for Windows.
+   There is currently no 64-bit version of KFW and therefore 
+   there is no (easy) method for obtaining AFS credentials.  
+   32-bit KFW 3.0 can be used with 32-bit OAFW libraries
+   to obtain AFS tokens but there is not for the feint of 
+   heart.
+
+ * A faster implementation of the fcrypt algorithms improves 
+   performance.
+
+ * The afsd_service.exe now supplies Event Log Message Text.
+   The event log no longer generates warning text due to lack
+   of message configuration.
+
+ * When afs servers are unreachable and network stack returns
+   a WSAEHOSTUNREACHABLE error, the AFS client will immediately 
+   mark the attempted server as being down.   This allows for
+   very fast response to the calling application.  This change
+   has a pronounced improvement when the Windows Explorer is
+   used on disconnected mobile computers.
+
+ * Added DebugOutputString debugging of the RX library
+
+Since 1.4.1 rc9:  1.4.1 rc10 released (10 March 2006)
+
+ * Fix the rx-lwp implementation to randomly generate rx call
+   identifiers which are supposed to be unique at a given point
+   in time.  This affects some of the command line tools used
+   for debugging but not the AFS Client Service itself which
+   uses the rx-pthreads implementation.
+
+ * xstats_fs_test.exe and xstats_cm_test.exe are now built for
+   Windows although they are not distributed
+
+ * don't generate an exception when logging unexpected SMB packets
+
+ * the data structures used by cm_IoctlGetVolumeStatus and 
+   cm_IoctlSetVolumeStatus are not compatible with the CIFS
+   Get/Set File Information calls so don't bother executing them.
+
+Since 1.4.1 rc8:
+
+ * Fix data written to registry as part of BackConnectionHostnames
+   data value
+
+ * Fix initialization bug when allocating cm_server_t objects that
+   would cause servers to appear to be down after each allocation
+   or renewal.   Server would appear up after the next check servers
+   cycle.
+
+Since 1.4.1 rc7: 
+
+ * Windows will return WSAECONNRESET to the next receive packet
+   operation on a socket if an ICMP packet is received in response
+   to a packet that was sent and could not be delivered because
+   the port was unreachable.  We have to treat this as 
+   WSAEWOULDBLOCK so that we can retry the select() check and
+   not mark the connection as bad.
+
+Since 1.4.1 rc6: 1.4.1 rc7 released (14 Feb 2006)
+
+ * The client manager maintains a least recently used list of
+   all the ACLs.  If an ACL is already the most recently used
+   do not bother to remove it from the list and place it on the
+   front.
+
+ * As part of the process of adding a new server, set the 
+   server is down flag and then perform a ping.  If the server
+   is up, the flag will be reset.  If the server is down, the
+   client will not timeout unnecessarily while attempting to
+   perform real work.
+
+ * If a Mountpoint String is the empty string, return PATH NOT 
+   FOUND.
+
+ * Modify behavior of the Network Provider to avoid querying the
+   profile location if integrated logon is known to be disabled.
+
+ * Correct behavior of 'LogoffPreserveTokens'.  When set, tokens
+   will always be preserved regardless of whether or not integrated
+   logon was used to obtain tokens.  When unset, tokens will be 
+   destroyed regardless of whether integrated logon was used to 
+   obtain the tokens unless the profile is stored in AFS.
+
+ * Disable LogoffTransferToken functionality.  The SMB V3 Logoff
+   message is being delivered even when the user is not logging
+   off of the computer.  
+
+ * Fix a deadlock condition introduced in rc6.
+
+ * Cell names are case-insensitive.  Since the founding of OpenAFS
+   there has been a bug that treated "cell", "Cell", and "CELL" as
+   different cells.  This would result in what appeared to be 
+   random disappearance of user tokens or a failure to authenticate
+   even when tokens were listed by the "tokens" command.
+
+Since 1.4.1 rc5: 1.4.1 rc6 released (2 Feb 2006)
+
+ * Additional auditing of the smb code revealed that smb ioctl
+   operations were failing to free smb_fid_t objects
+
+ * The File Identifiers assigned to smb_fid_t objects could be
+   given the value 65535 which is 0xFFFF which is also the 
+   INVALID_HANDLE value.  Both 0 and 65535 are now treated as
+   reserved values.
+
+ * Audited all assignments to fields and ensured that they are
+   protected by obtaining the relevant mutex object.
+
+ * Re-wrote the VNOVNODE handling to avoid a potential deadlock
+   if both the current cm_scache_t object and its parent are
+   both returning VNOVNODE.
+
+ * Removed all the logic associated with the 'dead_vcp' variable
+   which must have been added for debugging because its used 
+   was never thread safe and it truly served no purpose.
+
+Since 1.4.1 rc4: 1.4.1 rc5 released (25 Jan 2006)
+
+ * Re-enabled LogoffTokenTransfer and LogoffTokenTransferTimeout
+   registry settings.  Default is ON and 120 seconds.  If set to 
+   OFF, tokens will not be destroyed.
+
+ * Fixed a number of race conditions and reference count problems
+   associated with global queues.
+
+ * Added a method to detect abandoned smb virtual circuits so their
+   associated file handles, locks, user tokens, and smb session
+   resources can be released.
+
+ * Added a mechanism to allow user tokens to be preserved 
+   during integrated login and be freed after logoff.
+
+ * Check access permissions to the file before the file is 
+   truncated.
+
+ * More improvements to the handling of SMB Virtual Circuits
+   when SMB sessions are closed.
+
+ * Correct a race condition introduced in rc4 that could result
+   in a crash of afsd_service.exe.
+
+Since 1.4.1 rc3: 1.4.1 rc4 released (11 Jan 2006)
+
+ * Properly handle pre-mature SMB session closures.
+   File handles, tree connections, and user sessions are now
+   freed when the virtual circuit is closed.
+
+ * smb_username_t and smb_user_t objects are now properly reference
+   counted and freed as appropriate.
+
+ * disable to use of AFS file locks.  byte range locking is still
+   implemented but all locks are managed locally.  This prevents
+   multiple processes from editing the same file on the same 
+   machine but it does prevent multiple processes on separate 
+   machines from modifying the file.
+
+Since 1.4.1 rc2: 1.4.1 RC3 released (4 Jan 2006)
+
+ * A fix to "fs setserverprefs -vlserver".  Multiple calls with
+   the same server parameter would result in a panic condition
+   if the server had not already been contacted by the AFS 
+   client service.
+
+ * Better warnings are written to the afsd.log file when 
+   the Windows RPC Protocols are not properly configured as
+   is often the case on Windows 2000.
+
+ * fix the procmgmt library to restore C RTL signal handlers when 
+   it is being detached from the process prior to process termination.
+
+Since 1.4.1 rc1: 1.4.1 RC2 released (30 Nov 2005)
+
+ * close a lock leak in the rx library that could be triggered while
+   processing aborts
+
+ * prevent removal of drive mappings in response to afscreds.exe -M
+
+ * add logic to process VNOVNODE in cm_Analyze.  Force re-evaluation of symlink
+   strings and flush the stat cache entry.
+
+ * prevent server objects from being freed if user preferences are set.
+
+ * Update WIX support to 2.0.2419.0
+
+ * Release all locks on the server at service shutdown.
+
+ * A down server should be marked up as long as it responds to the client.
+   It doesn't matter if the server returned an error as long as the error
+   is something other than VRESTARTING.  If there is such an error, all
+   connections on that server should be marked for replacement.
+
+ * Change the check "up" servers period from once per hour to once every
+   ten minutes.  This matches the behavior of the Unix cache manager.
+
+Post 1.4.0 revisions: 1.4.1 RC1 released (21 Oct 2005)
+ * Byte Range Locking support has been added.  Architectural documentation
+   is located within src/WINNT/afsd/cm_vnodeops.c.   Best efforts are
+   made to enforce Windows mandatory locking model using locally managed
+   byte range locks with full file locks obtained from the file server.
+   Read-only volumes provide the user with an implied locking privilege.
+   Read-write volumes require that a user be granted the locking privilege
+   in order for a lock to be obtained.   As most Windows applications use
+   Shared file access modes, they require the ability to obtain locks in
+   order to access files.
+
+ * Implement error translation functions to convert Universal Error Codes
+   output by modern servers to local errno and winsock error values.
+   This fixes the error message problems using pioctl() calls from fs.exe
+   and the AFS Shell Extension.
+
+Since 1.4.0 rc8: 1.4.0 final tagged (20 Oct 2005); released (31 Oct 2005)
+ * Allow the AFS Client Service to set the firewall configuration by
+   retrying until after Windows determines the boot period is over.
+
+ * Do not attempt to configure the firewall on Windows 2000, XP pre-SP2,
+   or 2003 pre-SP1
+
+ * Detect IP address changes from within the AFS Client Service for the
+   purpose of checking down servers sooner
+
+ * If the file server or vldb server report RXKADUNKNOWNKEY, return
+   SEC_E_NO_KERB_KEY to Windows.   This provides an indication to the
+   user that there is a Kerberos key problem.  Previously the user would
+   receive no feedback when there was something wrong.
+
+ * Fix the large integer library support to properly handle values greater
+   than 32-bits
+
+Since 1.4.0 rc7: 1.4.0 rc8 released (15 Oct 2005)
+ * Updated CellServDB
+
+ * Fixed file name pattern matching.  Question marks can match nothing
+   if found at the end of a component.
+
+Since 1.4.0 rc6: 1.4.0 rc7 released (8 Oct 2005)
+ * Kerberos 5 ticket lifetimes should adhere to KFW Leash lifetimes
+
+ * The MSI installer now has a new Product ID for each build.  This
+   is to allow for automated upgrades.   The Upgrade ID is remaining
+   constant.
+
+ * Volumes that were cached and then subsequently were salvaged,
+   moved or otherwise taken temporarily offline (as opposed to being
+   busy) would become unreachable.  A distinction is now made between
+   a volume being offline and a server being down.
+
 Since 1.4.0 rc5: 1.4.0 rc6 released (2 Oct 2005)
 
  * Fixed several AFS Shell Extension issues:
@@ -89,11 +3657,7 @@ Since 1.4.0 rc1: 1.4.0 rc2 released (28 Aug 2005)
    Output monitor interface.  This data can be viewed with tools
    such as Sysinternal's DbgView.
 
-New development series 1.5.0 begun (17 Aug 2005)
-
 Since 1.3.87: 1.4.0 rc1 released (17 Aug 2005)
- * Byte-range locking as described in cm_vnodeops.c has been implemented.
-
  * When the cache manager reports ALLBUSY or ALLOFFLINE for
    a resource we should not be returning status codes such
    as Network Busy or Remote Host Down because these errors
@@ -164,11 +3728,6 @@ Since 1.3.84:
    include the full Kerberos 5 user principal name regardless of 
    whether or not the cell is local to the realm.
 
- * Eric William's IFS redirector has been checked onto the CVS head.
-   This code is experimental at the current time and is not being 
-   incorporated into the 1-4 branch releases.  Instructions for 
-   building from sources are found in the top-level README-NT file.
-
  * Modify integrated login so that it does not enter an infinite
    loop if the service is not set to auto start.