Windows: ChangeLog for 1.5.9906 (1.6.0pre6)
[openafs.git] / doc / txt / winnotes / afs-changes-since-1.2.txt
1 Since 1.5.9905 (1.6pre5)
2  * aklog supports dotted Kerberos v5 principal names.
3
4  * afskfw library always attempts afs/cell@USER-REALM
5
6  * afskfw library must test return code from
7    krb5_cc_start_seq_get() or will trigger a null
8    pointer exception when using Heimdal.
9
10  * lock protected fields must be 32-bit in order
11    to avoid memory overwrite races.
12
13 Since 1.5.9904 (1.6pre4)
14  * Fix caching of non-existent volumes.  The test to
15    trigger an immediate CM_ERROR_NOSUCHVOLUME in
16    cm_UpdateVolumeLocation() was backwards.
17
18  * Prevent the background daemon from checking the
19    status of non-existent volumes.  cm_CheckOfflineVolumes()
20    should skip volume groups with the CM_VOLUMEFLAG_NOEXIST
21    flag set.
22
23  * The afskfw library should return an error immediately
24    if the krb5_32.dll library cannot be loaded.  Affects
25    afslogon.dll and afscreds.exe.
26
27  * No longer depend on leashw32.dll in afskfw library.
28
29  * NPLogonNotify must provide the user password in all
30    calls to KFW_AFS_get_cred().  It cannot count on a
31    credential cache being preserved between calls.  Permits
32    tokens to be acquired for all cells listed in the
33    TheseCells registry value for a domain.
34
35  * Improve the trace logging from NPLogonNotify().
36
37  * Avoid a race when writing the cm_scache_t mountPointString
38    when acquiring mount point or symlink target data via
39    cm_GetData().  The race could result in bogus target
40    data being cached.
41
42  * Permit the use of des-cbc-md5 and des-cbc-md4 enctypes
43    as DES keys in asetkey.exe.
44
45 Since 1.5.9903 (1.6pre3)
46  * Fix automatic addition of Freelance cell mount points
47    broken in 1.5.9902.
48
49  * Avoid recursive offline volume checks which could cause
50    a crash due to stack exhaustion.
51
52 Since 1.5.9902 (1.6pre2)
53  * rx calls issued on a busy call channel are now specially
54    handled and logged.  All calls are automatically retried.
55
56  * The vos support for multi-homed servers was incorrectly
57    implemented.  The changes have been reverted.
58
59  * Avoid wasting cm_buf_t objects and associated data buffers
60    for obtaining mountpoint and symlink target strings.  Instead
61    read them directly into the cm_scache_t mountPointTarget
62    buffer.
63
64  * Optimize the evaluation of mountpoint and symlink targets
65    by skipping the FetchStatus and a full round-trip if
66    the cache manager does not have valid status information
67    for the object.
68
69  * Fix the abstraction of cm_FreelanceAddMount() by passing
70    in volume names that do not include the trailing dot.
71
72 Since 1.5.78
73  [there was no 1.6pre1 for Windows]
74
75  * vos commands now manipulate servers by UUID and can
76    recognize multi-homed servers.
77
78  * afs_config will not longer set the Tray Icon State
79    in the registry if the checkbox is not present in
80    the dialog. [RT 128591]
81
82  * Heimdal's roken utility library has been added
83    as \Program Files\Common\afsroken.dll
84
85  * When probing servers to determine if they are up or down
86    no longer issue an RXAFS_GetTime RPC to servers that indicated
87    that they do not understand the RXAFS_GetCapabilities RPC.
88    Since they responded it is known that they are up.
89
90  * AFS Explorer Shell Extension now works from folder
91    backgrounds.  Overlays for mount points and symlinks
92    are present in the dll, but are not registered at present
93    by the installers.
94
95  * Do not use RankServerInterval registry value as the value for
96    PerformanceTuningInterval.
97
98  * CellServDB updated to 13 Dec 2010 release from grand.central.org
99
100  * Add "fs chmod" command and display current mode as part
101    of "fs examine" output.
102
103  * When the data version of a mountpoint or symlink changes,
104    the target string in the cm_scache_t object must be cleared.
105    Otherwise, the new target will not be queried.
106
107  * "fs checkservers" now includes vldb servers in the output
108    and only lists multi-homed servers once.  A multi-homed
109    server that has at least one up interface is no longer
110    considered to be down.
111
112  * When asynchronously storing dirty data buffers to the
113    file server ensure that (a) the cm_scache_t object and
114    the cm_buf_t object are for the same File ID so that
115    locking and signalling work properly; and (b) if the
116    FID no longer exists on the file server, do not panic,
117    just discard the buffer.
118
119  * When processing VNOVOL, VMOVED and VOFFLINE errors perform
120    server comparisons by UUID or address and not simply by
121    cm_server_t pointer.  Otherwise, server failover may not
122    succeed.
123
124  * Do not preserve status information for cm_scache_t objects
125    when the issuing server is multi-homed.
126
127  * Giving up all callbacks when shutting down or suspending
128    the machine is now significantly faster due to the use
129    of an rx_multi implementation.  (This functionality is
130    still off by default and must be activated by a registry
131    value.)
132
133  * Race conditions were possible when updating the state
134    of the cm_volume_t flags and when moving the volumes
135    within the least recently used list.
136
137  * Ensure that the lanahelper library does not perform a
138    NCBRESET of each lan adapter when enumerating the
139    current network bindings.  Correcting this permits OpenAFS
140    to work on Windows 7 when the network adapter settings
141    change.
142
143  * Fix creation of mount points and symlinks as \\AFS\xxxx
144
145
146 Since 1.5.77
147  * Reimplement FetchData and StoreData operations to make
148    use of rx_Writev and rx_Readv which is faster than than
149    multiple calls to rx_Write and rx_Read.  Throughput
150    improvements of up to 20% are possible.
151
152  * Many improvements to the rx rpc stack:
153
154    - RTT measurements
155
156    - Fast recovery is not triggered by packet resend timeouts
157
158    - Socket errors are now detected and reported
159
160    - avoid repetitive memory allocations
161
162    - avoid calling gettimeofday() for every packet
163
164    - reduced dependency on the call->lock
165
166    - When a call receive is completed, ack all of the packets
167      immediately.  Do not wait for the first response packet
168      to be sent.
169
170    - Do not hold the call->lock during rx_Write* and rx_Read*
171      operations when the call fields in use can only be accessed
172      by the application thread.
173
174    - Reduce the default window size from 128 back to 32 because
175      the current overhead from walking packet queues in the rx
176      listener thread significantly hampers the ability to
177      process incoming packets from the network.
178
179    - Only backoff the peer timeout once for a series of naks.
180
181    - Release builds are lean and mean.  All debugging and
182      packet tracking code is disabled.
183
184  * Version number is logged to the Windows Application Event
185    Log as part of the start pending message.
186
187  * MSI installers now backup and restore configuration
188    data during upgrades.
189
190  * Rx pmtu discovery has been disabled by default.  Use
191      HKLM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters
192        RxPMTUDiscovery "DWORD"
193    value to re-activate.
194
195  * cm_BkgDaemon event evaluation has been optimized to avoid
196    unnecessary overhead.
197
198  * If a volume is known to be readonly, then locally fail any
199    change request without sending it to the file server.  This
200    avoids triggering the file server's abort threshold.
201
202  * Do not leak cm_volume_t objects from the volume LRU queue.
203
204  * Ensure that cm_NameI errors are acted upon promptly.
205    There are many cases in the SMB server where an error from cm_NameI()
206    was either ignored or not acted upon until several other operations
207    are performed that could result in the same error being repeated.
208    This is a mistake which did not have negative side effects until
209    additional checks for callback status were added recently.
210
211    At present, if a CM_ERROR_ACCESS error is returned and ignored,
212    subsequent attempts to operate on the same cm_scache_t will result
213    in additional queries to the file server that will also end in an
214    abort response.  This can trigger the file server to delay responses
215    to the client.
216
217  * Fix fs mount point and symlink create operations which were
218    failing due to improper directory separator termination.
219
220  * RXAFS_GetVolumeStatus can return VNOVOL, VMOVED, etc.  In
221    order to process them and update volume state a fid must
222    be passed to cm_Analyze().  Use the volume root fid.
223
224  * Negative caching for volume lookups that fail with either
225    VL_NOENT or VL_BADNAME.  The expiration time is five minutes.
226    This prevents volume lookup storms.
227
228  * Provide each volume lookup its own two hour lifetime instead
229    of reseting all volume location information every two hours.
230    This prevents the first smb path evaluation after the volume
231    location data has been discarded from potentially causing an
232    smb client timeout.
233
234 Since 1.5.76
235  * When the SYSTEM account is in use, the SMB connection is
236    not always established as S-1-5-18.  Sometimes it uses an
237    anonymous, S-1-5-7, connection.  In both cases the SMB
238    authentication name is the nul string.  To better identify
239    when an SMB connection is local system, the smb_username_t
240    is now stored as a SID instead of a user name.  When a SID
241    is used, a new flag bit is set SMB_USERNAMEFLAG_SID.
242
243    In smb_SetToken if AFS_PIOCTL_AFSLOGON is set and the user
244    connection is not SYSTEM, the RPC SID is checked.  If RPC
245    SID is SYSTEM, that supercedes the SMB authentication.
246
247  * Replace STATUS_IO_TIMEOUT with RPC_NT_SERVER_TOO_BUSY for
248    CM_ERROR_ALLBUSY.
249
250  * Replace STATUS_PATH_NOT_FOUND with RPC_NT_SERVER_UNAVAILABLE
251    for CM_ERROR_ALLOFFLINE and CM_ERROR_ALLBUSY.
252
253  * Optimize behavior of buf_CleanAsyncLocked().  Avoid searching
254    for the cm_scache_t object by FID if it is already known.
255
256  * If the readonly file attribute is set (stored as a unix mode)
257    then a CreateFile operation should fail if the file is opened
258    for DELETE in combination with any other privilege.
259
260  * If the directory buffer contents are garbage we can crash
261    the service.  Add some simple validation checks to ensure
262    that cm_dirEntry_t objects have the correct flag value and
263    that the name strings are not too long.
264
265  * If the bulkStat errorCode indicates that a particular object
266    is inaccessible due to a VIO error, we must update the server
267    status appropriately in order to permit failover.
268
269  * An RX_MSGSIZE error is returned by the new PMTU detection
270    code.  It is critical that such an error result in a retry of
271    the operation that failed.  Otherwise, the PMTU detection can't
272    work and the server will be marked down.
273    Secondly, it is important that such errors not leak to the
274    application layer.  Map them to CM_ERROR_RETRY in all cases.
275
276  * Translate RX_RESTARTING to the same cache manager error code
277    for all RPC classes.
278
279  * When logging server volume instance errors to the windows
280    application event log, be sure to log the cell as well.
281    Translating from server ip address is non-trivial.  Make it
282    easier for administrators triaging issues to plug the volume
283    and cell info into vos commands.
284
285  * Since unix mode bits are represented in octal in most cases
286    make sure we log them that way.
287
288  * The cm_enforceTrailingDot() function failed if there was a
289    trailing dot followed by white space.
290
291  * Rx: Do not send RX_MSGSIZE if the PMTU size did not change.
292
293 Since 1.5.75
294  * A crash could occur if a single letter share name was
295    dynamically evaluated as matching a cell name.  This was
296    due to a failure to treat the comparison of two nul
297    strings as identical.
298
299  * Docbook validation is performed by xmllint during builds.
300
301  * Volume package bugs in the file server can result in VOFFLINE
302    being returned to the client instead of VNOVOL or VMOVED.  As
303    a result the Unix CM treats VOFFLINE the same as VMOVED and VNOVOL.
304    The Windows client has not.  As a result, bugs in the file server
305    can cause the Windows client to lose if the volume has in fact
306    been moved to another server.
307
308    As part of this change, the volume location list is updated prior
309    to the volume status being applied to the server from which the
310    error was received.
311
312  * If the pages to be flushed are from a readonly or backup volume
313    they can't be dirty.  In this case there is no need to stabilize
314    the pages before they are locked and recycled.
315    Stablilization is performed on the cm_scache_t object so do not
316    stabilize and unstablize for each cm_buf_t object.
317
318  * Over the years the processing of the Freelance callbacks have
319    added functionality that behaves much more like FetchStatus checks
320    to a file server.  If the data version of the object has changed,
321    get the new data.  Given that is the case, we can remove much of
322    the original refresh logic that is rather race prone.   Say goodbye
323    to cm_fakeGettingCallback and cm_fakeDirCallback.
324
325  * When processing a pioctl path with either smb_ParseIoctlPath or
326    smb_ParseIoctlParent, cm_SyncOp(CM_SCACHESYNC_NEEDCALLBACK|GETSTATUS)
327    must be called on the cm_scache_t object to ensure that it is up
328    to date before we permit cm_Lookup or other operations to be performed
329    on it.  Add the cm_SyncOp() call to smb_ParseIoctlPath and
330    smb_ParseIoctlParent to ensure it is done for all pioctl operations.
331
332  * The 32-bit tools installer was displaying client configuration wizard
333    pages.  Since, the 32-bit tools share configuration with the AFS
334    service, the 32-bit tools installer should not be attempting to change
335    client configuration.  Remove said wizard pages from the 32-bit tools
336    installer.
337
338  * cm_data.rootSCachep is a global pointer to the cm_scache_t that
339    represents the root.afs volume root directory.  Throughout the
340    code this cm_scache_t was being used without ensuring that a
341    callback to the volume is in fact valid.
342
343    Under most circumstances this would not be a problem.  However,
344    it is possible for a request to fail due to the lack of a callback
345    at a critical moment.  Add a new function cm_rootScachep() that
346    attempts to ensure that a callback is present (if possible) prior
347    to use the cm_scache_t object.
348
349  * When the contents of the Freelance root directory changes the fake
350    directory buffers are updated and a fakeDirVersion is incremented.
351    The dataVersion of the cm_scache_t object is supposed to be updated
352    on the next access by performing a fake get callback request.
353    Unfortunately, this did not always occur because of a race.  If another
354    Freelance object is updated first, the root directory object would
355    never successfully get a fake callback.
356
357    This patchset ensures that the generation of the fake directory
358    buffer content and the callback are obtained under the same set
359    of locks thereby removing the race.
360
361  * Enforce in afsd_service that tokens can be set for alternate
362    userids only if the SetToken pioctl is called from the
363    Local System account.
364
365 Since 1.5.74
366  * Revise SMB QuerySecurityInfo Response for MS10-020
367
368    MS10-020 (http://support.microsoft.com/kb/980232) has caused
369    many problems for implementors of SMB 1.0 servers and applications
370    that call GetFileSecurity() without checking the return code to
371    determine if the call succeeded.  The gist of the vulnerability
372    was that the SMB redirector would pass any buffer it received
373    to the application regardless of whether or not it was valid.
374    MS10-020 protects the applications by strictly validating the
375    SMB response data structure and the data in the security descriptor
376    that is returned.
377
378    The problem for SMB 1.0 server implementors is that there have
379    been at least three different protocol descriptions for
380    NT_TRANSACT_QUERY_SECURITY_DESC published over the last decade
381    and all of them are incomplete.  Therefore, just about no one but
382    Microsoft has an SMB 1.0 server implementation that produces the
383    exact out that they are expecting to validate.
384
385    The end result is that in an attempt to protect applications from
386    crashing due to invalid input being passed in directly caused
387    dozens of applications to crash by not returning any security
388    descriptor data at all.  Even when the applications didn't crash
389    they might not have been able to save their data.  Cisco WAAS
390    and NetApp DataOnTap systems were most adversely affected and
391    they have had CIFS protocol licenses for many many years.
392
393    To fix OpenAFS here is what needed to be done:
394
395    1. Instead of returning a security descriptor that gives ownership
396       to the NUL SID, give it to the Everyone SID and set the flag
397       that states that everyone has full access.
398
399    2. Validate the input parameters.  In particular, check to ensure
400       that the SMB file descriptor is valid and the file has not
401       been deleted.
402
403    3. Enforce the maximum output data and parameter counts.
404
405    4. Handle buffer overflow and buffertoosmall conditions
406       in the manner that Microsoft expects them to be handled.
407       In particular, note that the parameter data which is returned
408       in the SMB Data Region is not counted in the Data Count.
409       Even if MaxData is 0, we can still return parameters values
410       as long as MaxParm is large enough.
411
412  * Prevent use of AFSCache file contents if mapped to
413    a new address.
414
415  * The Windows version of "fs newcell" did not accept any parameters
416    and behaved quite differently from the Unix version.  Instead of
417    permitting new cell information to be added, the Windows version
418    simply forced the existing cell information to be reacquired.
419
420    This update adds a new pioctl, VIOCNEWCELL2, to support the
421    implementation of a Unix-style "fs newcell".  The functionality
422    added here differs from the Unix version in the following ways:
423
424      1. "fs newcell" with no arguments is still accepted
425         in order to maintain compatibility with prior Windows
426         behavior.
427
428      2. "fs newcell -cell <cell> -dns" instructs the cache manager
429         to add the new cell but obtain the vldb server info from
430         DNS.
431
432      3. "fs newcell -cell <cell> ... -registry" instructs the cache
433         manager to add the new cell and also save the cell configuration
434         data in the registry for use the next time the service restarts.
435
436      4. The -vlport and -fsport options are accepted although the
437         -fsport value is currently unsupported by the cache manager.
438
439  * New registry value "FreelanceImportCellServDB" instructs Freelance
440    to create a mount point for every cell name listed within the
441    CellServDB.
442
443  * Path MTU discovery for Rx is activated.
444
445  * Rx socket input buffer is converted to a circular buffer.
446
447  * Fix usage of cm_FreeServerList().  Do not set the server list
448    pointer to NULL after calling cm_FreeServerList().  Doing so
449    can result in a memory leak.
450
451  * Only enable Rx NAT pings on a single anonymous connection at a
452    time.
453
454  * Fix cm_IoctlSkipQueryOptions() buffer management.  Prevents a
455    potential read beyond end of memory buffer.
456
457  * Reduce requested privileges when reading registry CellServDB
458    to the minimum required.
459
460  * Add support for RPC Pipe Service NetWkstaGetInfo levels
461    101 and 102 which are called on Windows 7 and 2008-R2.
462
463  * Prevent integer overflow during quota percent used calculation
464    in Explorer Shell Extension  (RT 126846)
465
466  * Generate a meaningful error if "fs listacls" or "fs setacls"
467    are executed on the Freelance root.afs volume.
468
469  * RXAFS_InlineBulkStat errors must be processed via cm_Analyze.
470    RXAFS_InlineBulkStatus does not return errors such as EACCES,
471    VNOVOL, VNOVNODE, VOFFLINE, VBUSY, VIO, VMOVED, etc. as an RPC return
472    code.  Instead they are returned in the status info errorCode field
473    for each file.
474
475    Traditionally, the error associated with the first FID in the query
476    list has been returned to the caller of cm_TryBulkStatRPC().
477    However, the error has never been processed through cm_Analyze()
478    which means that the per-vnode processing for VNOVNODE and the volume
479    global processing for VMOVED, VNOVOL, etc. has never been performed.
480    As a result, failover to other .readonly volume instances cannot occur,
481    volume moves will not be handled, and files that have been deleted
482    are not detected.
483
484    This patchset makes the following changes:
485
486    1. If an inline bulk operation has been performed and the inline
487       errorCode is a volume global error, then that error replaces
488       the RPC return code within the cm_Analyze() processing for
489       the RPC.  This will affect whether or not a retry operation
490       is performed.
491
492    2. The variable 'inlinebulk' is reset to 0 at the top of the
493       cm_Analyze() loop in case failover from an inlinebulk capable
494       file to an inlinebulk incapable file server takes place.
495
496    3. The FID that is passed into cm_Analyze() is not a real fid.
497       Instead it consists of the cell and volume but vnode = 0.
498       This ensures that the error (if any) is not applied to the
499       directory object.
500
501    4. If an inline bulk operation was performed, prior to performing
502       the cm_MergeStatus() operation a vnode a check is made to
503       determine if an error was returned for that vnode.  If so,
504       cm_Analyze() is called with no connection, a fake cm_req_t,
505       the fid, and the error.  This permits cm_Analyze() processing
506       to be performed on the file.  
507
508  * Show configuration pages for all types of MSI installations
509
510    The OpenAFS MSI installer wizard used to not show any configuration
511    pages for "Typical" and "Complete" installations.  Setting the
512    workstation cell and logon options during installation required
513    selecting the "Custom" option.  Many users choose the "Typical" option
514    during installation, and thus would never see the configuration pages.
515    Therefore, for these users, the workstation cell was being set to the
516    default.
517
518    This patch makes the workstation cell and logon option configuration
519    pages visible to all types of installations (except silent
520    installations which show no UI).
521
522  * cm_LookupInternal creates Freelance mount points and symlinks
523    when queries cannot be found in the Freelance root.afs directory.
524    If the search name is a full cell name for which vldb information
525    can be obtained, then a mount point is added.  If the search name
526    is a left-most substring or the full cell name with a dot appended
527    to it, then a symlink was created.  This approach created a very
528    poluted Freelance name space.
529
530    This patchset makes the following changes:
531
532     1. Do not create symlinks with a dot appended to the cellname
533
534     2. Do not create symlinks where the left-most substring is not
535        a full dot separated component of the cellname.
536
537     3. Permit lookups to succeed when we would have created a
538        symlink in the past without creating the symlink.
539
540  * BPlus tree lookups are much faster than searching through
541    the native directory format on Windows because the case sensitive
542    hash tables cannot be used successfully.  Permit BPlus trees
543    to be used except when called with cm_BPlusDirFoo as the action
544    function because cm_BPlusDirFoo is used to build the BPlus trees
545    from the native directory format.
546
547  * Symlinks are ending up in the Freelance root.afs directory that
548    end with a dot.  Make sure it cannot happen.
549
550  * cm_FreelanceAddMount and cm_FreelanceAddSymlink is supposed to
551    return the allocated FID of the entry that was added.  However,
552    cm_NameI is called to perform the lookup without forcing an update
553    of the Freelance fake directory.  As a result the entry may not be
554    found.
555
556    Force an update prior to calling cm_NameI() by using
557    cm_clearLocalMountPointChange() and cm_reInitLocalMountPoints()
558    if required.
559
560  * The Freelance fake root directory buffers were not zero-filled.
561    This results in random behavior that can cause the service to
562    terminate unexpectedly.
563
564  * The validation check for the response from the GetVolumeStatus
565    pioctl is incorrect.  The response is not simply a VolumeStatus
566    structure but also several C strings appended to it.
567
568  * When flushing a file, we need to commit the file length changes
569    as well as the dirty buffers.  Call cm_FSync instead of buf_CleanVnode
570    which is called by cm_FSync.
571
572  * Prevent rx_rpc_stats global lock from being a bottleneck in the
573    Rx library.
574
575 Since 1.5.73
576
577  * Avoid a race when updating cell vldb server lists
578    that can result in a crash.
579
580  * Avoid a deadlock when managing CM_SCACHESYNC_STOREDATA
581    state operations for directory objects.
582
583  * Add new Windows Application Event log messages for
584    VBUSY, VRESTARTING, ALL_BUSY, ALL_OFFLINE, and ALL_DOWN.
585    Include message throttling to prevent the same message
586    from being logged repeatedly within a five second window.
587
588  * Reduce lock contention by waiting for cm_buf_t I/O
589    operations to complete before permitting cm_SetupStoreBIOD
590    to analyze a buffer for inclusion in a BIOD.
591
592  * Split the cm_buf_t flags field to separate the flags
593    that are protected by the cm_buf_t mutex from those
594    protected by the buf_globalLock.  This eliminates the need
595    to hold both locks everytime the flags field is accessed.
596    Both locks were not held in the past resulting in race
597    conditions that could result in deadlocks.
598
599  * Add "vos setaddrs" command.
600
601  * Rx library lock contention avoidance between rx_NewCall and
602    rx_EndCall.
603
604  * Rx library races due to inconsistent use of rx_connection
605    conn_data_lock to protect the flags field.
606
607  * Rx library inconsistent use of RX_CALL_TQ_WAIT which could
608    result in deadlocks.
609
610  * Rx library must signal transmit queue waiters when flushing.
611    Otherwise, deadlocks can occur.
612
613  * In cm_UpdateVolumeLocation, avoid searching for a ".readonly"
614    volume on a numeric volume name.
615
616  * File buffer allocations whose offsets are beyond server EOF
617    should be locally allocated and zero filled.  The file server
618    should not be issued a FetchData rpc which is guaranteed to
619    fail.
620
621  * Enable integrated logon to work with Windows 7/2008 when
622    user logons are performed with a non-Domain Kerberos principal.
623
624  * Add Protection Error messages to aklog output.
625
626 Since 1.5.72
627
628  * Prevent the Explorer Shell extension from crashing if
629    symlink creation failed.  (126406)
630
631  * A Rx level NAT ping has been implemented.
632    Add NatPingInterval registry value to
633      HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters
634    to permit Nat Ping to be enabled.  The default value is 0 seconds.
635
636  * When a re-initialization is taking place, be sure to reset
637    cm_noLocalMountPoints to 0 in case someone deletes the "Freelance"
638    registry key out from underneath the service.
639
640  * Add krb5 error message translation to aklog, afscreds,
641    afslogon.dll, the network identity manager afs provider
642    and translate_et.
643
644  * Mode bits aren't directly exposed by the Win32 API. We were leaving
645    them to default to 0777 when creating new files and directories.
646    This version introduces two configuration parameters;
647    'UnixModeFileDefault' and 'UnixModeDirDefault' which are DWORD
648    registry entries that are used to set the initial mode bits.
649    If the values are set to 0, then the behavior is identical to what we
650    had before.
651
652  * Minidump files are now produced with a timestamp appended
653    to the name.
654
655  * An SMB request debugging monitor has been added.  When activated
656    the monitor will automatically turn on trace logging if any SMB
657    request has required longer than 60 seconds to complete and will
658    then create a minidump every 60 seconds thereafter until the
659    request completes.
660
661 Since 1.5.71
662
663  * Restore use of DNS AFSDB and SRV records by kaserver clients.
664
665 Since 1.5.70
666
667  * Avoid a potential Freelance deadlock during initial execution 
668    of afsd_service.exe if the old ini file data has to be
669    imported.
670
671  * Three rx library corrections.  (1) Idle data connection
672    processing could timeout if the send window filled and
673    took longer than the idle data timeout period for the
674    transmit window to re-open.  (2) The transmit queue
675    could be emptied prematurely.  A required check for the
676    queue being in use was forgotten.  (3) The function that
677    is supposed to implement a wait for the transmit queue
678    to cease being busy failed to wait.
679
680 Since 1.5.69
681  * Restore use of DNS AFSDB and SRV records which were
682    unintentionally disabled in 1.5.69
683
684 Since 1.5.68
685  * Add a context menu to the NetIdMgr AFS Provider 
686    notification icon.
687
688  * Prevent an empty directory Btree from being created and
689    marked as valid if cm_BPlusDirBuildTree fails.
690
691  * cm_BPlusEnumAlloc should not fail if the enumeration
692    contains zero entries.
693
694  * In cm_BPlusXXX functions, return ENOMEM if malloc() fails.
695
696  * Do not leak the cm_scache_t dirlock if cm_BPlusDirBuildTree
697    fails.
698
699  * fs examine should report owner and group ids as signed values.
700
701  * Protect buffers in smb_WriteData from simultaneous writes.
702
703  * Query network interface MTU values from the registry because
704    the IP Helper GetAdapterAddresses() fails to report a manually
705    configured MTU.
706
707  * Improve performance by not dropping and reacquiring the rx_call
708    lock in rx_WriteProc* and rx_ReadProc*.
709
710  * When configuring the rx library, the network interface MTU
711    must be applied to both the maximum send size as well as the
712    maximum receive size as is done when rx_SetMaxMTU is called
713    by the application.
714
715 There was no 1.5.67 release
716
717 Since 1.5.66
718  * Convert afsauthent.dll to use the xdr_alloc and xdr_free
719    routines from afsrpc.dll in place of malloc and free.
720    This permits the two libraries to be built with different
721    C runtime libraries without crashing.
722
723  * Set the DOS Readonly attribute on a file/directory 
724    whenever the unix mode combined with the mask 0200 
725    is true.  Previously there was a discrepency between
726    the mask used for testing for readonly behavior and
727    that used for setting the attribute.
728
729  * Disable AFSVolSync based .readonly "whole-volume callback"
730    support because the all file servers prior to 1.5.67
731    (and perhaps 1.4.12) do not properly assign a value to
732    the AFSVolSync structure in bulk status RPC responses.
733
734  * Improve the error output from aklog to output the value
735    from krb5 error_message() if the afs_com_err output
736    indicates an unknown value.
737
738  * Hold a lock on the cm_scache_t object when the smb
739    server is assigning a new clientModTime value.
740
741  * Permit custom build version numbers to be set
742    without modifying the src/config/NTMakefile.<platform>
743    files.
744
745  * Add support for binary code signing with cross-signed
746    certificates and arbitrary versions of signtool.exe.
747
748  * Convert VBUSY and VRESTARTING to CM_ERROR_ALLBUSY and
749    do not permit them to be exposed to the smb redirector.
750
751  * Convert STATUS_TIMEOUT responses to STATUS_IO_TIMEOUT
752    to avoid confusion within the smb redirector.
753
754  * Fix the byte order assigned to port numbers associated
755    with AFSDB record lookups.  They must be network byte 
756    order not host byte order.
757
758  * Add dynamic server ranking based on RPC round trip
759    time measurements.
760
761 Since 1.5.65
762  * Official support for Windows 7 and Server 2008 R2
763
764  * Improved Rx RTT computation following the lessons
765    learned by TCP.
766
767  * Prevent a file server bug (FetchData returning an
768    invalid length instead of zero) from causing an
769    "unexpected network error" when writing to files.
770
771  * Promote DNS SRV records as superior to DNS AFSDB
772    records.  Support arbitrary port numbers for vldb
773    servers.
774
775  * Add "fs listacl -cmd" support.
776
777  * Add AFSVolSync based .readonly "whole-volume callback"
778    support.  With this functionality, multiple objects from
779    a .readonly volume can have their status validated by
780    issuing a single RXAFS_FetchStatus RPC.
781
782  * Remove drive mapping functionality and service start/stop
783    from afscreds.exe.
784
785  * Remove drive mapping functionality from afs_config.exe.
786
787  * Adjust SMB error return codes to avoid returning 
788    STATUS_TIMEOUT which results in the SMB redirector
789    disconnecting.
790
791  * Network Identity Manager OpenAFS Provider now provides its
792    own "AFS lock" notification icon to report the status of
793    "have tokens, have no tokens, service not started, service
794    started but inaccessible".  Hovering over the icon lists the
795    cells for which tokens exist (if any) and the OpenAFS version
796    number.  Double-clicking executes the Network Identity Manager
797    default action.
798
799  * When merging the current status for an AFS object, ensure
800    that the volume status for that object is set to 'vl_online'.
801
802  * Permit cm_Analyze to request a retry even when the cm_req_t is
803    flagged CM_REQ_NORETRY if the RPC failed due to RX_CALL_DEAD.
804    The retry will force the use of a new connection.
805
806  * Add digital signatures to resource only dlls as required by
807    Windows 7.
808
809  * Prevent pioctl calls from retrying indefinitely when a sharing
810    violation error occurs.
811
812  * Add {HKLM,HKCU}\SOFTWARE\OpenAFS\Client  DWORD  "ShowMountTab"
813    to restore access to drive mapping functionality in afscreds.exe
814    and afs_config.exe.
815
816  * Permit Rx minimum peer timeout, maximum receive window size and
817    maximum send window size to be configured via the registry.
818
819  * The MSI installer now sets the ARPINSTALLLOCATION as required by
820    Windows 7.
821
822  * DNS lookups set the port numbers in network byte order within
823    the cache manager.
824
825  * Replace use of the 16-bit compatibility API WinExec with
826    ShellExecuteEx in afs_config.exe and afscreds.exe.  WinExec
827    is incompatible with Windows 7 / Server 2008 R2 UAC 
828    functionality.
829
830 Since 1.5.64
831  * Short circuit background volume checks if a shutdown
832    or suspend request is received.
833
834  * Avoid contacting the file server in order to allocate
835    an empty buffer beyond the current length of the file.
836
837  * When a request for streams on a directory or mount 
838    point object is received, do not offer a default stream.
839    This was affecting the saving of roaming profiles.
840
841 Since 1.5.63
842  * Fix Windows 2000 compatibility.  Do not call rand_s() 
843    even if it is compatible with the C run time library
844    version.
845
846  * Fix a data consistency error between the output of 
847    NetWkstaGetInfo and NetServerGetInfo RPCs, specify the Lan 
848    workstation group name "AFS", and report server name as 
849    "AFS" instead of "\\AFS" when the caller asks for "\\AFS".
850
851  * Enable executables to be run from \\AFS on Windows 7.  
852    Return "Name not found" instead of "File not found" when 
853    a directory or file name cannot be found.
854
855  * Prevent cache manager from marking file server "down" when 
856    the data returned in response to either RXAFS_FetchData64 
857    or RXAFS_StoreData64 is invalid.
858
859  * Add pioctl data validation to the AFS Explorer Shell extension.
860
861 Since 1.5.62
862  * After 1.5.62 afslogon.dll would no longer crash but it 
863    also would not load "domain" specific configurations.
864    Fixed.
865
866  * An uninitialized variable was present in the symlink
867    recursion detection loop.
868
869  * Reverse addition of unique per file GUID during 
870    Create/Open responses. Inclusion of the GUID prevents 
871    Cygwin applications (and others) from accessing //afs.
872
873  * Treat "filename::$DATA" as a synonym for "filename".  
874    This addresses the recent report of roaming profiles 
875    failing to save back to the file server.
876
877  * When given a choice between an error from rx_Write() 
878    or RXAFS_EndStoreData(), use the rx_Write() error.  
879    This ensures that over quota and access denied errors 
880    are acted upon.
881
882  * If an error occurs during RXAFS_StoreData operations, 
883    apply that error to all of the buffers in the BIOD. 
884    This ensures that failures will not be retried if they 
885    will only fail again.
886
887  * Do not perform a DNS lookup for a cellname if the 
888    cellname prefix is _._AFS_IOCTL_._.  This will avoid 
889    DNS lookups when the query is for 
890    _._AFS_IOCTL_._.F7E5F580200909010061TTTTNT7TT.{10E39A49-4531-4496-A08E-842D4C440D20}.
891
892  * Fix Freelance root.afs volume object callback processing.  
893    Object synchronization and status merging bugs.
894
895  * Fix Explorer Shell "invalid parameter" bug introduced 
896    in 1.5.62.
897
898  * Log RXKAD errors to the trace log.
899
900  * Prevent simultaneous pioctl calls from multiple processes 
901    from stepping on each other's data.
902
903  * Prevent simultaneous pioctl calls from crashing the 
904    afsd_service.
905
906  * Add data validation to pioctl output processing in 
907    ktc_GetToken and ktc_ListTokens.
908
909  * Add data validation to pioctl output processing in 
910    fs.exe and symlink.exe.
911
912 Since 1.5.61
913  * IMPORTANT: New support for DCE RPC Services: SRVSVC and WKSSVC.
914    No longer will browsing \\AFS produce truncated share names.
915
916  * Registry specified server preferences did not result in
917    the CM_SERVERFLAG_PREF_SET flag being applied to the
918    cm_server_t object.  
919
920  * Avoid unnecessary DNS lookups of share names as cells
921    when it is known that the name cannot be a cell name.
922    Any name that does not contain a dot is skipped.
923
924  * When processing Dfs Referral requests, do not return an
925    error if the server is down or busy; if the volume is
926    offline; the cell vldb cannot be reached; etc.
927    These paths are still \\AFS paths and so the client 
928    should not be sent to search elsewhere for resolution.
929
930  * CRITICAL: Prevent the cm_Daemon thread from terminating when
931    the machine enters the suspend state.  IF the cm_Daemon thread
932    dies, there is nothing to execute down server checks.
933
934  * Prevent use of smb_StartedLock before initialization which
935    can result in a panic in the lock package.
936
937  * Improve error checking in afslogon.dll in order to prevent
938    NULL pointer dereferences within GetLogonDomainOptions()
939    if the Lsa operations fail.
940
941  * Add support to the build system to automatically update
942    a Microsoft Symbol Store.
943
944  * Do not access the cm_conn_t after executing the cm_Analyze
945    loops.  Doing so can result in an access to memory that has
946    been freed.
947
948  * CRITICAL: If a StoreData request offset is not aligned on the 
949    buffer module blockSize, (offset % blockSize) bytes of dirty
950    data will not be written to the file server.
951
952  * CRITICAL: If a StoreData64 request is sent to a file server
953    that does not support large files (>2GB) and the client is 
954    unaware that the server has no large file support, the first 
955    chunksize worth of data will not be written to the file server.
956    This bug was introduced in 1.5.3.   It affects all IBM AFS file
957    servers and all OpenAFS file servers older than 1.4.0.
958
959 Since 1.5.60
960  * If a file server becomes inaccessible while the cache manager has 
961    dirty buffers to write, the afsd_service buf_IncrSync thread can 
962    attempt to use 100% of the cpu.
963
964  * Fix the locking that protects the cm_cell_t lists 
965    (all, name, id, free).
966
967  * Remove cm_cell_t objects from the name and id hash tables before 
968    placing them on the free list.
969
970  * Fix "fs newcell" which was broken in 1.5.60.
971
972  * Do not attempt to synchronize dirty buffers if the associated 
973    volume is known to be unavailable.
974
975  * Log to the Windows Event Log dirty buffers that cannot be written 
976    during the shutdown process.
977
978  * Modify behavior of a Freelance mountpoint target that does not 
979    specify a cell.  Instead of assuming the target volume is in the 
980    Freelance.Local cell, use the workstation "Cell" specified in the 
981    registry. A mountpoint target of "#root.cell." will now mean the 
982    root.cell volume in the workstation cell for the current session.  
983    If the workstation cell changes from "athena.mit.edu" to 
984    "andrew.cmu.edu", the referenced volume will also change without 
985    requiring that the mount point targets be altered.
986
987  * Avoid false infinite loop errors when validating the cm_cell_t 
988    free list during startup.
989
990  * Fix two more locations where xdr_free() should be used instead of 
991    free() to permit a checked built of afsd_service.exe to work with 
992    release builds of afsrpc.dll.
993
994  * Add cm_FindServerByUuid().  Re-implement RXAFS_InitCallBackState3() 
995    to permit the server Uuid to be used to lookup the server object 
996    and from that determine the cell.  This permits callbacks that are 
997    received from alternate addresses to be processed with a known server 
998    object.  Previously a request from an unknown server would clear all 
999    callbacks from all cells.
1000
1001  * Fix a bug that prevented optimal performance when using a non-zero 
1002    value for 'daemonCheckVolCBInterval'.  As a reminder, when 
1003    "daemonCheckVolCBInterval" is set to a non-zero value, all .readonly 
1004    volume callbacks are automatically renewed 90 minutes before their 
1005    expiration.
1006
1007  * Fix automatic ranking of vldb servers whose values are obtained from 
1008    the CellServDB file.
1009
1010  * Add logging for RX CALL DEAD errors which are generated if the remote 
1011    host is unreachable.
1012
1013  * Add failover for RX CALL TIMEOUT errors when the volume is readonly 
1014    or the call is to a vldb server.
1015
1016  * Add registry based cell search functionality to NetIdMgr, 
1017    afs_config.exe, and klog.exe.
1018
1019  * afsconf_GetCellInfo() has been modified to perform gethostbyname() 
1020    lookups on the host names in the CellServDB instead of using the 
1021    specified IP addresses.  This provides aklog, pts, vos, etc. the same 
1022    CellServDB behavior that the Windows Cache Manager uses.
1023
1024  * Completely a behind the scenes change.  The snprintf() routines have 
1025    been completely rewritten.
1026
1027  * When updating the stat cache entry callback of a .readonly object 
1028    from the volume group object, update the file server reference to 
1029    ensure it matches the most update to date callback.
1030
1031  * Add proper support for processing callbacks from multi-homed file 
1032    servers.  Instead of comparing servers by cm_server_t pointer, 
1033    compare them by UUID when the UUID is known.
1034
1035  * During a shutdown short circuit the offline volume check daemon 
1036    functionality.
1037
1038  * Properly track link counts during cm_Link and cm_Unlink operations.
1039
1040  * Return the error code of RXAFS_FetchData / RXAFS_StoreData in 
1041    preference to an error code reported by rx_EndCall.
1042
1043  * Add "PerFileAccessCheck" registry value to permit testing against 
1044    experimental file servers that include per-file acl support.  This 
1045    value is intentionally undocumented.  It is not to be used by
1046    production environment deployments.
1047
1048  * Log a warning to trace log if a volume group is marked as a DFS 
1049    File Set.  The Windows OpenAFS client does not include DFS support.
1050
1051  * Fix a bug introduced in 1.5.60 that prevents the afs netidmgr 
1052    provider from obtaining tokens when referrals are in play.
1053
1054  * Add "fs chown" and "fs chgrp" commands to permit the owner and 
1055    group of objects stored in AFS to be set from Windows.
1056
1057  * Avoid performing background daemon operations when the machine is 
1058    going into suspend mode.
1059
1060  * Perform offline volume checks in most recently used order.
1061
1062  * Prevent crash when a data version for a cache object goes backwards.
1063
1064  * fs setquota, fs setcachesize, vos setfields, and vos create now 
1065    accept human readable orders of magnitude. (K, M, G)
1066
1067  * fs listquota fixed to permit large quota sizes to be displayed.
1068
1069  * rx packet resend and data packets sent counts were incorrect.
1070
1071  * Multi-thread safe library versions are now being generated and used.  
1072    mtafsubik.lib, mtafsutil.lib, mtafsvldb.lib, mtafsvol.lib.
1073
1074  * Microsoft SMB Redirector (mrxsmb.sys) support for ExtendedSessTimeout
1075    values are now available on XP through Windows 7.  Add functionality
1076    to autodetect if such support is present on the machine.  If so,
1077    configure it if necessary and dynamically adjust the AFS Rx timeout
1078    values accordingly.
1079
1080  * Correct another race condition in the Rx library that could result
1081    in an unexpected panic while freeing the Rx call iovq.
1082
1083 Since 1.5.59
1084  * A fix to the pioctl library to support drive substitution 
1085    to UNC paths.  (SUBST <d:> <\\afs\cell\path>).
1086
1087  * On April 9th Microsoft released a Hot Fix for Windows Server 2003 SP2 
1088    that corrects a deadlock in the smb redirector and also adds new 
1089    functionality that permits the AFS SMB server to be given a longer 
1090    timeout than is normally the case.  New functionality has been added 
1091    to configure these additional LanmanWorkstation\Parameter values.
1092    (This functionality has been backported to XP SP3 and is scheduled
1093    to be released on June 5th.)
1094    
1095  * The BackConnectionHostNames registry value configuration was broken 
1096    when dynamic re-establishment of Netbios Name registrations was added.
1097    Restore it.
1098
1099  * Hidden vos commands are revealed.
1100
1101  * If the "DisableLoopbackCheck" registry value is set, do not unset 
1102    it during the same service session.
1103
1104  * Reorganize code that prevents multiple Store operations to the same 
1105    File.
1106
1107  * Modify IsPathInAfs test in Explorer Shell Extension and fs.exe to 
1108    permit broken symlinks to be treated as being in AFS.
1109
1110  * Fix vos commands that output 64-bit integer values.
1111
1112  * Cygwin Import Libraries are provided in the SDK for all OpenAFS DLLs.
1113    Permits building cygwin applications against OpenAFS libraries. 
1114
1115  * OpenAFS Release Notes, Administrator Guide and User Guide now installed 
1116    as Windows HTML Help (.CHM) files.  
1117
1118  * NSIS installer does a much better job of cleaning up files left 
1119    over from previous installs.
1120
1121  * Fix RT#124787, a race condition between "fs flush <dir>", "fs flushvolume", 
1122    or "fs flushall" and on-going directory operations that can result in 
1123    afsd_service.exe crashing.
1124
1125  * Add support for DNS SRV records in place of AFSDB records.  
1126    _afs3-vlserver._udp.<cellname>.  Priority field is used.  
1127    Weight is currently ignored.
1128
1129  * Add a method of specifying Client CellServDB information within the 
1130    registry that can be used to either override the CellServDB file or 
1131    force the use of DNS lookups for a given cell.
1132
1133    The registry schema is as follows:
1134
1135      HKLM\SOFTWARE\OpenAFS\{Client,Server}\CellServDB\[cellname]\
1136        "LinkedCell" REG_SZ "[cellname]"
1137        "Description" REG_SZ "[comment]"
1138        "ForceDNS" DWORD {0,1}
1139
1140      HKLM\SOFTWARE\OpenAFS\{Client,Server}\CellServDB\[cellname]\[servername]\
1141        "HostName" REG_SZ "[hostname]"  Default: [servername]
1142        "IPv4Address" REG_SZ "[address]"  Used only if gethostbyname() fails.
1143        "IPv6Address" REG_SZ "[address]" <future>
1144        "Comment" REG_SZ "[comment]"
1145        "Rank" DWORD "0..65535"  Default: 0
1146        "Clone" DWORD "{0,1}" <future: server only>
1147        "vlserver" DWORD "7003" <future>
1148        "ptserver" DWORD ... <future>
1149
1150    ForceDNS is implied non-zero if there are no [servername]
1151    keys under the [cellname] key. Otherwise, ForceDNS is zero.
1152    If [servername] keys are specified and none of them evaluate
1153    to a valid server configuration, the return code is success.
1154    This prevents failover to the CellServDB file or DNS.
1155    
1156    Only one of "HostName" or "IPv4Address" is required.  "HostName"
1157    is optional if [servername] is the host name.
1158
1159  * Extend registry based CellServDB functionality to 
1160    afsconf_GetCellInfo() interface used by aklog and many 
1161    other command line utilities.
1162
1163  * libafsconf.dll moved from OpenAFS\Client\Program to OpenAFS\Common
1164    as it is now used by both client and server components.
1165
1166 Since 1.5.58
1167  * PriorityClass of afsd_service.exe process raised to 
1168    "High" to match the priority of the system services 
1169    that are waiting for afsd_service.exe to respond.
1170    Configurable using [TransarcAFSDaemon\Parameters]
1171    DWORD "PriorityClass" value.  (use values from Win32
1172    API)
1173
1174  * Change error reporting of CM_ERROR_BADSHARENAME to
1175    use the correct error (NTSTATUS_BAD_NETWORK_PATH).
1176    The error we were sending would cause the smb 
1177    redirector to drop the connection.
1178
1179  * Change the error reporting of CM_ERROR_ALLOFFLINE
1180    and CM_ERROR_ALLDOWN to return NTSTATUS_PATH_NOT_FOUND.
1181    Previous we would return Bad Network Path which 
1182    would cause the smb redirector to cancel all file
1183    handles on the same "share".
1184
1185  * A debug version of afsd_service.exe can now be used
1186    with a release version of afsrpc.dll (or vice versa).
1187    afsrpc.dll now implements and exports xdr_free().
1188
1189  * Removed all unprotected OutputDebugString() calls as
1190    those calls can block for up to 10 seconds if there 
1191    is contention for the globally shared memory or if
1192    the debugger fails to read data in a timely manner.
1193
1194  * Visual Studio 2008, WDK 6.1 and DDK 6.1 are now 
1195    supported for builds.  The production releases still
1196    use VS 2005.
1197
1198 Since 1.5.57
1199  * Discovered that XP/2003 supports a variant on recvmsg 
1200    called WSARecvMsg.  The input parameters are mostly 
1201    compatible with the Posix recvmsg.  This will save 
1202    multiple memcpy() calls per received packet.
1203
1204  * Discovered that Vista/2008 supports a variant on 
1205    sendmsg called WSASendMsg.  The input parameters 
1206    are mostly compatible with the Posix sendmsg.  This 
1207    will save multiple memcpy() calls per sent packet.
1208
1209  * Exporting rx_ReadProc32, rx_WriteProc32 from afsrpc.dll 
1210    and utilizing rx_ReadProc32 from within the cache manager 
1211    as part of the FetchData operations.  rx_ReadProc32 and 
1212    rx_WriteProc32 are optimized versions of rx_ReadProc and 
1213    rx_WriteProc for use when reading 32-bit integer values.
1214
1215  * The Network Identity Manager AFS provider now reports 
1216    progress events.  These provide a better user experience 
1217    with Network Identity Manager 2.0.
1218
1219  * [RT 124293] A race condition exists which permits the 
1220    scp field of the an smb_fid_t object to become invalid 
1221    after a request on the smb_fid_t has begun.  Remove the 
1222    race by protecting all access to the scp field with the 
1223    smb_fid_t mx mutex and obtaining a local reference on 
1224    the cm_scache_t object for the length of the request.
1225
1226  * [RT 124276] If the vldb is out of sync with the contents 
1227    of the file servers, afsd_service will retry too many 
1228    times when a file server reports a volume as not being 
1229    present.  Now if the list reported by the vldb is the 
1230    same as the previously seen list, then the retry is 
1231    aborted.
1232
1233  * [RT 124276] Read-only volume failover was broken in 
1234    1.5.53 whenever accessing a volume results in VNOVOL or 
1235    VMOVED.
1236
1237  * [RT 124276] Prior to 1.3.70 the volume server reference 
1238    list was not reference counted and would be prematurely 
1239    freed while in use.  When reference counting was added 
1240    in 1.3.70 a bug was introduced that could result in 
1241    service reference list corruption.
1242
1243  * Add Windows Application Event Log warning messages for 
1244    "Client SMB MPX value too large" and 
1245    "Client SMB Buffer Size too small".
1246
1247  * Renaming of files across directory boundaries would result 
1248    in an invalid handle error when attempting to access the 
1249    files after the move.
1250
1251  * Fix the handling of Tran2 Set Path Info RPCs.  Do not fail 
1252    when a smb file descriptor cannot be found.  The whole point 
1253    of using a Path Info function is because an smb file 
1254    descriptor wasn't allocated.
1255
1256  * More edge cases in which dynamic addition of Freelance 
1257    root.afs entries would get the wrong FID or where the 
1258    root.afs directory would not be refreshed.
1259
1260  * Buffer overflow could occur if the workstation cell name was 
1261    longer than 64 characters.  Crashes could occur in 
1262    afscreds.exe, afslogon.dll, and afsd_service.exe.
1263
1264  * VNOSERVICE and VOFFLINE errors were leaking and were exposed 
1265    to the smb client.
1266
1267  * Improve consistency of the bad data version value used for 
1268    cm_scache fields.
1269
1270  * Log file server uuid values as part of the cm_server object 
1271    when available.  Dump the cm_server object list in response 
1272    to "fs memdump".
1273
1274  * Optimize the performance of resetting access control lists 
1275    when tokens are set or removed.
1276
1277  * Fix vos.exe so that it can work with very large volume 
1278    identifiers
1279
1280  * Remove symlink recursion tests and increase max symlink count 
1281    to 64 from 16.
1282
1283 Since 1.5.56
1284  * Undo the "UAC manifest fix" applied to afs_config.exe.
1285
1286  * Fixed some additional race conditions in the Rx library
1287
1288  * Ensure that Freelance allocation of vnodes follow 
1289    the AFS convention of odd vnodes are directories 
1290    and everything else is an even vnode.
1291
1292  * Add Freelance logic to mount point and symlink 
1293    evaluation functions.
1294
1295  * Enhance smb_ParseASCIIBlock() so that it can handle
1296    all of the STRING formats defined by the CIFS Technical
1297    Report 1.0.  
1298
1299  * Validate the output of smb_ParseASCIIBlock() in all
1300    callers.  Return CM_ERROR_BADSMB if the STRING field
1301    cannot be parsed.  CM_ERROR_BADSMB will cause the
1302    contents of the packet to be logged.
1303
1304  * If multiple SMB Raw Write operations were taking 
1305    place at the same time, there could be data corruption
1306    because unique event objects were not generated for 
1307    each Netbios receive operation.
1308
1309 Since 1.5.55
1310
1311  * Fix a race in rxi_WriteProc which could result
1312    in a freed or in use packet being passed to 
1313    rxi_PrepareSendPacket if the call is currently
1314    in a transmit wait state.  Passing a freed packet
1315    will result in a panic.  Passing an in use packet
1316    might result in a call failure or perhaps data
1317    corruption.
1318
1319  * Kerberos referrals broke the NIM AFS provider 
1320    logic for automated configuration of the workstation
1321    cell with a new identity.  Now if a referrals 
1322    response is returned, assume the cell belongs to the
1323    new identify.
1324
1325  * The interface to buf_CleanAsync() and 
1326    buf_CleanAsyncLocked() has been changed to permit 
1327    errors to be propagated to the caller.  
1328
1329  * During an enumeration of a directory, if the btree
1330    has not yet been generated, return an error.
1331
1332  * When mapping CM_ERROR values to NTSTATUS values
1333    do not treat 0 as an error.
1334
1335  * Avoid a cm_scache_t object reference count underflow
1336    when renaming via the SMB interface.
1337
1338  * smb_IsMask() can be called with a non-8.3 input buffer.
1339    Separate smb_IsMask() into smb_Is8Dot3Mask() for 8.3
1340    input buffers and smb_IsMask() for non-8.3 input buffers.
1341
1342  * Add cm_buf_t error state to the "fs memdump" output.
1343
1344  * pioctl drive mapping checks need to take into account
1345    Global Drive Mappings and SUBST assignments.
1346
1347  * Rename operations should not be permitted if the 
1348    destination name collides with an existing name that
1349    differs only by case UNLESS the collision is the object
1350    that is being renamed.
1351
1352  * Increase the maximum number of background daemon threads
1353    to 64.  Leave the default at 4.
1354
1355  * Set the FILE_UNICODE_ON_DISK flag when reporting the 
1356    file system characteristics.
1357
1358  * Report the maximum component name length as 255 even
1359    for Unicode as part of the file system characteristics.
1360
1361  * Add RX debugging information to "fs memdump" output
1362    in checked builds.
1363
1364  * Refcount the cm_server_t objects returned by
1365    cm_FindServerByIP()
1366
1367  * Fix the UAC manifest applied to afs_config.exe
1368
1369  * rxdebug now indicates if any RX_CONN flag is set
1370    not just some of them
1371
1372  * Change the mapping of CM_ERROR_WOULDBLOCK from 
1373    NTSTATUS_LOCK_NOT_GRANTED to NTSTATUS_CANT_WAIT
1374
1375 Since 1.5.54
1376
1377  * Includes #GCO Public CellServDB 07 Nov 2008
1378
1379  * Prevent separate cell entries from being created for
1380    "foobar.org" and "foobar.org." which can happen if
1381    an AFSDB record is found instead of a CellServDB 
1382    record.
1383
1384  * Fix a panic when checking the SMB virtual circuit list.  
1385    If a VC is destroyed while the list is being checked 
1386    it is possible for the next object to become invalid.
1387
1388  * Increased logging to afsd_init.log of netbios name 
1389    related errors.
1390
1391  * Fix a DNLC panic when a UTF-16 string that cannot be 
1392    converted to a utf-8 string is provided as a filename.
1393
1394  * In the NSIS installer, delete old afslogon.dll/afscpcc.exe 
1395    from %windir%\system32 and fix the WinLogon\Notify\AfsLogon 
1396    location to refer directly to the new location in 
1397    %programfiles%\openafs\client\program
1398
1399  * Be more aggressive about responding to Netbios 
1400    NRC_BRIDGE/NRC_NOWILD errors.  Rebind the Netbios name to 
1401    the LANA within the listener thread without performing a 
1402    delete and reset.
1403
1404  * Use the WNet Enumeration of all connected drives as a filter 
1405    in the pioctl GetIoctlHandle operation.  This should remove 
1406    the last situations in which there was a delay when opening 
1407    an Explorer Shell properties menu with the AFS Shell 
1408    Extension.
1409
1410  * Fix the parsing of CellServDB in Windows to handle linked 
1411    cells as is done on Unix.
1412
1413  * Add support for linked cells to the cache manager,
1414    netidmgr afs provider, and aklog.  When two cells are
1415    linked, a volume lookup that fails in one cell is looked
1416    up in the other.  This can be used for construction of 
1417    test cells that override specific volumes; cell renaming;
1418    and cell splitting.
1419
1420  * Increase the length of cell and realm names that can 
1421    be entered in the NIM AFS provider.
1422
1423  * Actively prevent a 32-bit afsd_service.exe from 
1424    executing in the WOW64 environment.
1425
1426  * Protect against invalid IP address values in CellServDB
1427    parsing.
1428
1429 Since 1.5.53
1430
1431  * Fix an Rx panic caused by an attempt to double free
1432    an rx_packet when an error occurs while writing the
1433    packet.
1434
1435  * Fix an exception cause by a race condition when 
1436    processing multiple file change notifications registered
1437    by the Explorer Shell or other applications.
1438
1439  * Modify the Rx debug interface to use var_args and 
1440    permit Rx debugging to be used on 64-bit Windows 
1441    which previously had it disabled.
1442
1443 Since 1.5.52
1444
1445  * Automated lock hierarchy enforcement added to the
1446    osi base lock package.  This permits detection of lock
1447    violations that might but often does not result in 
1448    deadlocks.  Enabled by default in the checked builds.
1449    May be activated in release builds via the registry
1450    value "LockOrderValidation" in the TransarcAFSDaemon
1451    Parameters key.
1452
1453    When a violation is detection an assertion is thrown
1454    generating a dump file and a message indicating which
1455    locks were obtained out of order is logged to the 
1456    Windows Application Event Log.
1457
1458  * Attempt to ensure that a dump file will be generated
1459    whenever the service panics.
1460
1461  * Removed unused lock cm_bufGetMutex
1462
1463  * Many out of order lock acquisitions were detected
1464    using the lock order verifier and were corrected.
1465
1466  * A race condition within the function path cm_GetSCache() ->
1467    cm_GetNewSCache() -> cm_RecycleSCache() permitted a 
1468    cm_scache_t object to be issued simultaneously to two 
1469    threads.   This would eventually result in a panic due 
1470    to the resulting undercount.
1471
1472  * Fix interpretation of the empty string as the ioctl path
1473    to mean the current directory.  "fs lsm", "symlink list", 
1474    etc. now return a "not a ..." error instead of "does not
1475    exist".
1476
1477  * Add SMB_STRF_SRCNULTERM flag to smb_ParseStringXXX functions.
1478    to indicate that the input string is a nul terminated string.
1479    Assign ti when input strings are nul terminated instead of 
1480    length counted. (from 1.5.50)
1481
1482  * The CIFS protocol specification for handling NT_TRANSACT_CREATE
1483    does not match the observed behavor.  The 'nameLength' is specified
1484    in bytes, not in characters.  Fix the implementation to match
1485    the observed behavior. (1.5.50)
1486
1487  * The cm_HaveAccessRights() attempt at deadlock avoidance by 
1488    calling lock_TryRead() on the parent directory cm_scache_t rw-lock
1489    does not avoid the deadlock.  Avoid the deadlock by enforcing the
1490    lock order of the lowest vnode first.  Then remove the infinite 
1491    loop avoidance in cm_SyncOp() that was returning an unwarranted
1492    access denied error.
1493
1494  * File Server lock synchronization was not propertly enforced in 
1495    smb_ReceiveNTCreateX() and smb_ReceiveNTTranCreate().
1496
1497  * Another change to the short name generator.  Plus and equal are 
1498    not valid characters in a short name according to the 
1499    RtlIsNameLegalDOS8Dot3() in kernel mode.  They have been replaced
1500    with left and right brace in order to minimize the impact.
1501
1502  * Fix a race condition that can result in a heap overwrite error if
1503    the number of known file servers or vldb servers increases during
1504    the preparation phase of a cm_CheckServers() operation.
1505
1506  * If the SMB Authentication would fail, a LSA allocated memory 
1507    buffer would be leaked.
1508
1509  * Rewrite the cm_cell_t allocation code to permit cell vldb server
1510    lookups to fail without leaking cm_cell_t objects.
1511
1512  * Add "fs setcrypt auth" to permit the use of rxkad authentication
1513    only mode.  Not documented.
1514
1515  * Initialize Rx mutex and lock objects once and only once as part of
1516    the DLL load process.
1517
1518  * When reporting the Volume Name "AFS" do not include the terminating
1519    NUL in the reported length.  
1520  
1521  * Refresh Volume Location information upon receipt of a VNOVOL error
1522    from the file server and avoid a race condition that prevented the
1523    updated volume location information from being destroyed immediately
1524    after it was acquired.
1525
1526  * In response to VNOVOL and VMOVED, remove the volume id from the server's
1527    volume list so that the volume's up and down status is not affected 
1528    when the machine is shutdown.
1529
1530  * Many fixes to the Rx stack related to packet allocation and deallocation;
1531    Rx debugging; Rx packet tracking across queues; and Rx packet loss caused
1532    by overwriting the rx_call currentPacket pointer when it was already 
1533    referring to a packet.  
1534
1535  * Rx Jumbograms are now off by default.  To re-enable, add "RxJumbo" = "1"
1536    in the TransarcAFSDeamon/Parameters key.
1537
1538  * "fs flush", "fs flushvolume", and "fs flushall" now destroy locally 
1539    constructed directory B+ trees for flushed directory objects.
1540
1541  * When cached pages for directory objects have been locally modified, do
1542    not permit the locally modified pages to be mixed with pages subsequently
1543    obtained from the file server.  Doing so can result in directory 
1544    corruption.
1545
1546  * If Ubix errors are received in response to VL_xxx operations record
1547    the error on the server instance and permit the operation request to 
1548    be retried in case another server is able to answer the query.  We have
1549    seen at least one instance of a cell in which a VL server returned 
1550    UNOQUORUM (possible database truncation) when the other servers were
1551    responding successfully.
1552
1553 Since 1.5.51
1554  * Optimize the assignment of write errors to dirty 
1555    buffers by applying the first error to all buffers 
1556    belonging to the same object instead of trying each 
1557    buffer in turn.
1558
1559  * Add resource version info to xstat_fs_test and xstat_cm_test
1560  
1561  * Fix a delete vs delete[] usage problem in the WiX custom 
1562    handler dll
1563  
1564  * When creating a mount point, validate the volume name to 
1565    make sure it exists.
1566
1567  * When processing a mount point, pay attention to VL_BADNAME 
1568    errors.
1569
1570  * Remove a race condition from cm_volume_t recycling that could 
1571    have resulted in two threads making use of the same object at 
1572    the same time.
1573
1574  * Fix a reference count leak on smb_vc_t objects introduced in 
1575    1.5.50.  Permit the objects to be freed once again.
1576
1577  * Fix the output of "fs memdump" for smb_vc_t objects that was 
1578    broken in 1.5.50.
1579
1580  * Add routines for debugging smb refcount errors.
1581
1582  * When shutting down the cache manager, do not permit AFS 
1583    callback requests to be processed. Doing so can result in 
1584    invalid memory accesses.
1585
1586  * Do not recycle a deleted cm_scache_t object unless the 
1587    refCount is 0.  Doing so can result in a deadlock and 
1588    invalid memory access.
1589
1590  * Minimize the number of RPCs sent to the file server for 
1591    directory bulk status requests. Only request status for 
1592    objects that we are actually reporting on and only if we 
1593    do not already have status for the object and then make 
1594    sure that we return as much as we can at once via the SMB 
1595    interface but not so much that it exceeds the RDR timeout
1596
1597  * Enable bos restricted operations
1598
1599  * Fix the creation of submounts used by the afscreds and afs_config 
1600    drive mapping tabs.
1601  
1602  * Avoid repeated retries when attempting to obtain access rights.  
1603    If the access rights were obtained successfully but do not 
1604    satisfy the request, fail the request.
1605
1606  * Fix error code reported when attempting delete a file on a 
1607    readonly volume or one that is marked with the readonly DOS 
1608    attribute.
1609
1610  * Fix a short name truncation bug.
1611
1612  * Fix a heap corruption error when reading the CellServDB file 
1613    location.
1614
1615  * Fix directory listings when the directory has "lookup" permission 
1616    only and the directory has never been previously accessed.
1617
1618  * Fix several tracking issues for cm_scache_t rw locks.
1619
1620  * Ensure that all buffers used to store cell names are the
1621    correct length.
1622
1623  * Restore Windows 2000 support (broken in 1.5.50).   
1624    LOCALE_INVARIANT was introduced in XP.
1625
1626  * Add RxUdpBufSize registry value.  Default is 256K.
1627
1628  * Avoid multiple deadlocks between cm_freelanceLock and cm_scacheLock
1629
1630  * Do not include trailing NULs when returning file names in 
1631    a directory search response.
1632
1633  * Prevent RX from crashing the afsd_service by attempting
1634    to allocate to many buffers at once when memory is fragmented.
1635
1636  * Avoid a deadlock when freeing cm_server_t objects
1637
1638  * Optimize search cell file.  Do not search to end of file
1639    if the cell has already been found.
1640
1641  * Remove explorer shell extension delay on local disks.
1642
1643  * Automatically pre-allocate 64 Rx packets per thread
1644
1645  * Add smb lock requests and stat cache lock allocations to
1646    the output from fs memdump.
1647
1648 Since 1.5.50
1649  * Fix Large File Support (broken in 1.5.50)
1650
1651  * Fix "fs setacl" (broken in 1.5.50)
1652
1653  * Fix pioctl path evaluation of drive letter
1654    mapped paths. (broken in 1.5.50)
1655
1656  * Fix installation of VC8 Runtime library in the EXE
1657    Retail installer. (broken in 1.5.50)
1658
1659  * Avoid a potential deadlock during Volume Location 
1660    updates if all the file servers are unreachable at 
1661    the time the VL update succeeds.
1662
1663  * Ensure that rx connection object is references 
1664    during VL RPCs.
1665
1666  * Fix propagation of over quota errors during cm_FSync()
1667    calls.
1668
1669 Since 1.5.39 [1.5.50 released 16 July 2008]
1670  * There were no releases between 1.5.39 and 1.5.50.
1671
1672  * FIRST RELEASE WITH UNICODE SUPPORT
1673
1674  * Pioctl interfaces to the cache manager refactored
1675    to provide layering between the SMB specific code
1676    and the general purpose ioctl operation.
1677
1678  * Garbage collect dead SMB virtual circuits as soon
1679    as they are no longer being referenced.  This avoids
1680    problems with outstanding locks not being dropped
1681    when the virtual circuit becomes invalid.
1682
1683  * Remove the IBM Administration Reference documentation
1684    and replace it with the OpenAFS Command Reference 
1685    Manual.  
1686
1687  * Avoid calling rx_SetDeadTime and rx_SetHardDeadTime
1688    functions each time a connection is about to be used.
1689    Do not hold a lock on the rx connection object while
1690    it is being selected.  This avoids a race between 
1691    threads attempting to set the timeout values and 
1692    removes a bottleneck that was hampering performance.
1693
1694  * Ensure that the smb directory attribute is set 
1695    for all directory objects.
1696
1697  * Add vs2008 support to the NSIS installer scripts
1698
1699  * Replace the VC Runtime EXE installer with the MSI
1700    installer in the NSIS installer scripts
1701
1702  * Properly delete the VC7.1 C Runtime libraries.   
1703
1704 Since 1.5.36 [1.5.39 released 23 June 2008]
1705  * There were no 1.5.37 or 1.5.38 releases for Windows
1706
1707  * Use Visual Studio version of vsprintf() instead of 
1708    home grown version that resulted in linking conflicts
1709
1710  * Prevent buserver, ptserver and fileserver from crashing
1711    due to non-portable strftime() format strings.
1712
1713  * Prevent server crashes caused by rx_InitMorePackets()
1714    being called prior to allocation of all of the required
1715    synchronization objects.
1716
1717  * Fixed a memory leak in the internal B+ tree directory.
1718    For objects with non-8.3 names, the 'longname' memory
1719    allocation would be leaked during object deletion or
1720    tree destruction.
1721
1722  * Fixed a memory leak in the background daemon cm_CheckServer() 
1723    routine.  The memory allocated to store the server list
1724    was not freed.  
1725
1726  * Obtain a missing lock around a call to cm_RemoveSCacheFromHashTable(). 
1727
1728  * Correct an abstraction layer violation. cm_scache_t objects 
1729    should be marked deleted in cm_Unlink() and cm_RemoveDir() and not 
1730    in smb_CloseFID(). Cleanup of deleted cm_scache_t objects should be 
1731    performed in cm_ReleaseSCache() when the reference count hits zero. 
1732
1733  * Prototype cm_AdjustScacheLRU() and re-implement it using osi_QAddH().
1734
1735  * Do not reference 'smb_logp' in cm_vnodeops.c.  Use 'afsd_logp'
1736    instead.
1737
1738  * Ensure that scache object 'nextp' pointers are set to NULL
1739    when the objects are removed from the hash table linked list.
1740
1741  * If a dirty buffer cannot be written to the file server because
1742    of an access denied error, mark the error in the cm_buf_t
1743    structure so that it can be dealt with instead of retrying 
1744    forever.
1745
1746 Since 1.5.35
1747  * Update CellServDB file to GCO Public 23 Apr 2008
1748
1749  * Fix a cm_buf_t reference count leak when attempts to write 
1750    dirty buffers to the file server from within cm_IncrSyncer() 
1751    fail.
1752
1753  * Prevent udebug from crashing.
1754
1755  * Activate RX Idle Timeouts.  If the file server is busy for more 
1756    then 30 seconds, attempt to failover to another server without 
1757    marking the busy server down.
1758
1759  * Another VNOVNODE issue fixed.  When writing a dirty buffer
1760    to the file server, if VNOVNODE is received, mark all buffers
1761    as invalid without further attempts to contact the file server.
1762    
1763  * Improved performance on high latency links.
1764
1765 Since 1.5.34
1766  * Fix a bug preventing the re-initialization of the Freelance 
1767    root.cell contents when a change is made.
1768
1769  * Properly return CM_ERROR_NOSUCHFILE when removing a symlink 
1770    or mountpoint that does not exist.
1771
1772  * aklog, afscreds, integrated logon, and the NIM AFS credential 
1773    provider will all attempt to first acquire an afs service ticket 
1774    using the service principal: afs/<cell>@<CLIENT_REALM>.  This 
1775    permits the proper detection of the cell realm when multiple 
1776    realms are local realms for the cell.
1777
1778  * Fix fs commands that re-use file identifiers instead of forcing 
1779    a path evaluation each time.  This was broken in 1.5.33 when 
1780    hashes were added to the cm_fid_t structure.
1781
1782  * Fix symlink and mountpoint removal and then recreation when 
1783    applied to the fake Freelance root.afs volume.
1784
1785  * Fix SMB change notifications for the Freelance root.afs volume 
1786    when creating or removing symlinks and mount points.
1787
1788  * Force DNS AFSDB cell name lookups to lower case if the DNS 
1789    response is not all lower case.
1790
1791  * 32-bit installers are now built with Visual Studio 2005
1792
1793  * All vos.exe commands now support the "-noresolve" option which 
1794    forces the display of IP addresses instead of DNS hostnames.
1795
1796  * No longer hold the cm_volume_t mutex across VL_xxx RPCs.  This 
1797    permits operations that do not require up to date volume 
1798    location data to continue while waiting for the RPC to complete.  
1799    Multiple threads waiting for a volume location update on the 
1800    same volume set no longer trigger multiple calls VL_xxx RPCs.
1801
1802  * Volume server references could be marked offline and never 
1803    reset to the not_busy state.  
1804
1805  * Further optimizations to cm_Analyze() retry logic for 
1806    CM_ERROR_OFFLINE and CM_ERROR_ALLBUSY error handling.
1807
1808 Since 1.5.33
1809  * Optimize the DNLC by applying Interlocked incrementing for 
1810    statistics gathering and enabling greater use of read 
1811    locks instead of write locks
1812
1813  * Further optimize osi_Log operations when logging is disabled 
1814    by removing the need for the function call overhead.
1815
1816  * Add a new lock operation, Convert Read to Write, and apply 
1817    it throughout the cache manager.  This function provides a 
1818    fast transition from a read lock to a write lock when the 
1819    caller is the only reader.
1820
1821  * Fix a timeout problem when opening files or request locks 
1822    when the file in question is already write-locked by another 
1823    machine.
1824
1825  * Fix a deadlock that can occur if "fs flushall" is executed 
1826    while applications are writing to AFS.
1827
1828  * The cache manager would re-read data from the file server 
1829    after file truncation when obtaining buffers to write to the
1830    same file until the first StoreData RPC completes.
1831
1832  * Fixes error handling in cm_NTCheckDelete()
1833
1834  * Replaces cm_scache_t mutex with a read-write lock permitting 
1835    additional parallel access.
1836
1837  * Prevent an cm_scache_t reference undercount when evaluating 
1838    symlinks containing @sys when none of the active sysnames 
1839    match any of the available targets.
1840
1841  * Prevent the leak of a cm_scache_t rwlock if associated symlink 
1842    is too long.
1843
1844  * Set RxMaxMTU registry value to 0 which is the equivalent of 
1845    it not being set at all.
1846
1847  * Reduce contention between BkgDaemon threads
1848
1849  * Prevent CM_SCACHEFLAG_ASYNCSTORE from being reset on a write 
1850    failure
1851
1852  * Convert reference counts on cm_volume_t, cm_conn_t, cm_server_t 
1853    objects to use the faster Interlocked operations which avoid 
1854    the need to hold write locks.
1855
1856  * Permit rxkad errors other than RXKADEXPIRED to be treated as a 
1857    non-fatal error that forces a retry against another service 
1858    (if available.)
1859
1860  * Fix a crash in smb_WriteData that would occur if an application 
1861    opened the file as read-only and then sent a write request anyway.  
1862    (RT 88731)
1863
1864  * Respond to VL_NOENT errors by removing cm_volume_t object and
1865    setting it to be the first object to be recycled.  This is not 
1866    only a more efficient use of resources but it also prevents 
1867    repeated attempts to query the VLDB server for the volume from 
1868    the CheckOfflineVolumes routine.
1869
1870  * Change the defaults for RxEnablePeerStats and RxEnableProcessStats 
1871    back to "on".
1872
1873  * A first cut at a cache manager statistics monitor that can be used 
1874    to determine the necessary cache parameters to support the 
1875    application working set.
1876
1877    Off by default, the performance package can be activated by setting 
1878    "daemonPerformanceTuningInterval" in the service Parameters key.  
1879    As with the other daemon interval values the unit is in seconds.
1880
1881    At service start and each succeeding interval the cache manager 
1882    will write statistics to %TEMP%\afsd_performance.txt showing the 
1883    relative usage of cm_scache_t, cm_volume_t and cm_buf_t objects.  
1884    The FID statistics keep track of all FIDs seen by the cache manager 
1885    during the service session whether or not they are backed by any 
1886    live object in the cache.
1887
1888    These statistics are not stored in the cache file.
1889
1890  * Fix windows event logging broken in 1.5.33.
1891
1892  * Eliminate multiple calls to syscfg_GetIFInfo() which is used to 
1893    populate the IP address list for WhoAreYou/TellMeAboutYourself RPCs
1894    as well as when computing the server preference list.
1895
1896  * When merging status after a StoreData operation prevent data 
1897    buffers from being discarded that we would prefer to keep.  
1898    (Bug introduced in 1.5.33.)
1899
1900  * Modify installers the set RxMaxMTU to 0.
1901
1902  * In the AFS Configuration Panel on the Advanced->Miscellaneous 
1903    dialog, the Background Daemons and Service Threads fields were 
1904    swapped.
1905
1906  * Increase default number of Background Daemons to 4.
1907
1908  * Remove cm_volume_t reference from the cm_scache_t object.  Permit 
1909    cm_volume_t objects to be recycled.
1910
1911  * Windows Error Reporting has shown a number of previously unseen 
1912    stack corruption errors in the Explorer Shell extension.  The 
1913    minidump appeared to indicate the problem was in ParseAcl().  
1914    Reviewing the function it appears that numerous things could go 
1915    wrong if invalid input was provided.  Added error checking and 
1916    data validation.  Hopefully this will address the problem.
1917
1918  * Windows Error Reporting has shown crashes in aklog as a result
1919    of krb5_cc_get_default() failures not being handled.  They are
1920    now handled.
1921
1922 Since 1.5.32
1923  * The Rx library used a 32-bit type for sockets which was
1924    truncating the socket value on 64-bit Windows.  This 
1925    was not an issue in general but became an issue when 
1926    Rx "hot thread" support was enabled.
1927
1928  * Enable "Rx hot thread" support which ensures that while
1929    a received message is being processed that a new thread
1930    is allocated to receive the next message to arrive.
1931
1932  * Increased parallel access to smb_rctLock protected 
1933    resources.  Reduce the number of times that the 
1934    lock is dropped and re-obtained.
1935
1936  * Increased parallel access to cm_scache_t and cm_buf_t
1937    resources by replacing the previous global write lock
1938    protected reference counting mechanism with one built
1939    upon the use of InterlockedIncrement and InterlockedDecrement.
1940
1941  * Implement a hash for cm_fid_t to reduce comparison costs
1942    and inline the cm_FidCmp() function.
1943
1944  * Redefine the BUF_HASH and BUF_FILEHASH in terms of the cm_fid_t 
1945    hash which has a better distribution
1946
1947  * Modify cm_ConsiderPrefetch to evaluate the amount of data in 
1948    the most recent read request instead of the next chunkSize.  
1949    cm_chunkSize can be dozens or hundreds of buffers.  As a result
1950    too much time is spent performing the evaluation.
1951
1952  * Fix the usage of cm_scache_t bufCreateLock.  The purpose of this 
1953    lock is to prevent the creation of new buffers while a truncation 
1954    is being performed.  All references to bufCreateLock have been 
1955    removed except in two places:
1956    i.  a write-lock surrounding the function that calls buf_Truncate()
1957    ii. a read-lock within buf_GetNewLocked() that actually allocates 
1958        new buffers
1959
1960  * Modify the CM_CONFIG_DATA_MAGIC value to include a 
1961    CM_CONFIG_DATA_VERSION number which value be used to force the 
1962    replacement of the cache file contents when incompatible changes 
1963    are made between releases.
1964
1965  * CM_SCACHESYNC_ASYNCSTORE should not be ordered by 
1966    cm_SyncOpCheckContinue
1967
1968  * Avoid calls to multi_Rx if nconns == 0
1969
1970  * Modify smb_WriteData to perform background writes based upon the 
1971    crossing of 'smb_AsyncStoreSize' boundaries instead of cm_chunkSize 
1972    boundaries.  This will slow down writes from the SMB interface but 
1973    will avoid the risk of the CIFS client disconnecting from the AFS 
1974    client SMB server.  The default value for 'smb_AsyncStoreSize'
1975    is 128K.  
1976
1977  * SMB AsyncStore functionality is on by default but can be 
1978    disabled using the registry value:
1979
1980      HKLM\SOFTWARE\OpenAFS\Client DWORD "EnableSMBAsyncStore"
1981
1982    smb_AsyncStoreSize can be adjusted with 
1983
1984      HKLM\SOFTWARE\OpenAFS\Client DWORD "SMBAsyncStoreSize"
1985
1986    The value must be a multiple of the buffer block size 
1987    and cannot be larger than the chunk size.
1988
1989  * Do not leak a read lock on the bufCreateLock
1990
1991  * Do not forget to call cm_SyncOpDone if cm_SyncOp succeeded
1992    in cm_CheckNTOpen()
1993
1994  * In MergeStatus, only remove clean buffers from the hash table.
1995
1996  * Avoid the need to update the data version number on each buffer 
1997    associated with a scache when MergeStatus is called after a 
1998    StoreData by maintaining a range of valid data versions as part 
1999    of the cm_scache_t object.
2000
2001  * Profiling shows large numbers of blocked calls in cm_HoldSCache
2002    from cm_HaveAccess...   We can safely avoid the call so do so.
2003
2004  * Add "ForceAnonVLDB" service parameters registry value.  Default
2005    is 0.  Set to 1 to force the use of anonymous connections to
2006    the VLDB servers.  This is useful when using krb5 tokens and the
2007    VLDB servers have not been updated.
2008
2009 Since 1.5.31
2010  * Do not attempt to search for a cell name that matches one
2011    of the special share names "svrsvc", "wkssvc", "ipc$"
2012
2013  * Issue permission denied warnings from afscreds if attempts
2014    to modify the startup shortcut or registry values fail.
2015    This happens under Vista UAC.
2016
2017  * Do not return BAD_NETWORK_ERROR in response to attempts
2018    to create directories or files in the Freelance root.afs 
2019    volume.  Instead return ACCESS_DENIED.
2020
2021    BAD_NETWORK_ERROR was being sent because the Freelance cell 
2022    has no vldb servers.  Short circuit the error by testing for 
2023    freelance in CreateFile and MakeDir
2024
2025  * Treat srvsvc, wkssvc and ipc$ as pseudo files.  Permit them 
2026    to be opened and closed without actually existing.  For now 
2027    we treat them as equivalent to ioctls but this should 
2028    eventually change.
2029
2030  * Fix RAP processing to not reject names that exist in the 
2031    root.afs volume for GetInfo queries.
2032
2033  * In afscreds, use GetUserNameEx to obtain the username instead 
2034    of searching the registry.  Try UserPrincipalName first and 
2035    fallback to SamCompatible.
2036
2037  * Stop linking to rpcns4.dll which is no longer supported on 
2038    Vista and 2008.  TaAfsAdmSvr is going to have to be 
2039    redesigned.
2040
2041  * When processing dfs referral requests, if the sharename is 
2042    a partial match and therefore will not be added automatically 
2043    to the share list, make sure that we return an error.
2044
2045  * Avoid a crash when logging VNOVOL errors returned from 
2046    cm_CheckOfflineVolume.
2047
2048  * When trace logging is disabled, do not permit osi_LogSaveString 
2049    to perform the string copying.  By disabling the string 
2050    copies, throughput of the service more than doubles.
2051
2052  * when checking offline volumes, update the cell vlserver info
2053    if required and don't perform a check if there are no servers
2054    in the list.
2055
2056  * Add volumes in the vl_unknown state to the list of objects to be
2057    checked as offline or retried when an allbusy error is received
2058    in cm_Analyze.
2059
2060  * Add support for configuring rx_ExtraPackets
2061
2062  * All calls to buf_Get() must be protected by a read lock on the
2063    cm_scache_t bufCreateLock
2064
2065  * When a MergeStatus results in the invalidation of buffers, do
2066    not remove buffers from the hash tables that have active references.
2067
2068  * Upon receiving a VNOVNODE error from a file server, be sure to
2069    invalidate any file locks.  This prevents on-going attempts to
2070    extend the locks and will cause subsequent attempts to access
2071    the file to receive a invalid handle error.
2072
2073  * Prevent smb_ReceiveTran2SearchDir from adding terminating NULs
2074    to directory entry names.
2075
2076  * No longer discard tokens when RXKADBADTICKET error is received.
2077    Instead return STATUS_NO_KERB_KEY error.
2078
2079 Since 1.5.30
2080  * Add "cmdebug <host> -cellservdb" option and client service 
2081    implementation permits querying the vldb server for each 
2082    cell known to the cache manager.  The output is in a form
2083    that permits it to be used as a CellServDB file.
2084
2085  * Add Symlinks->Show option to the AFS Explorer Shell Context
2086    Menu
2087
2088  * Prevent buffer overrun in the cmd parser used by command
2089    line tools such as fs, vos, pts, etc.
2090
2091  * The path ioctl operations have several issues:
2092
2093    (1) the specified path for "fs examine, whereis, whichcell, 
2094        flush" and so always has the follow symlinks and mount 
2095        points semantics.  This makes it impossible to determine 
2096        what the FID of a symlink or mount point is.
2097
2098    (2) "fs examine" out is not the result of a single pioctl 
2099         operation but is actually the combined output of half 
2100         a dozen operations.  Path evaluation is an expensive 
2101         operation.  It would be faster if the caller could
2102         evaluate the FID first and then perform all of the 
2103         rest of the operations by specifying the FID instead 
2104         of the path.
2105
2106    (3) fs output reports all objects as files.  By adding a 
2107        GetFileType pioctl more informative output can be provided 
2108        that indicates what type of object the path evaluates to.
2109
2110    (4) the Windows fs command includes a number of commands that 
2111        do nothing but exist only because the Unix cache manager 
2112        supports them.
2113
2114    A new extendible data structure cm_ioctl_query_opts_t has been 
2115    added which can be optionally specified with pioctls that do not
2116    already require input data.  The first two fields of this structure 
2117    are 'literal' and 'fid'.  The literal field is used to indicate
2118    whether the last component of the path should be evaluated following 
2119    symlinks and mount points.
2120
2121    The fid field permits a fid to be specified.
2122
2123  * A new GetFileType pioctl has been added. The type of objects are 
2124    now output.
2125
2126  * A new "-literal" option is available for "fs examine, flush, whereis, 
2127    and whichcell.
2128
2129  * Unimplemented fs commands have been removed.
2130    
2131  * There are circumstances where a volume object is being accessed and 
2132    the volume is marked indicating that the volume location information 
2133    is out of date but where it is also pointless and perhaps dangerous 
2134    to block waiting for the rpc to complete.  One example is when 
2135    processing the cmdebug requests.  If we know that we are not going 
2136    to use the volume object to contact a server, then we can now set 
2137    the CM_GETVOL_FLAG_NO_RESET flag.
2138
2139  * when moving up in the directory tree we search the recorded fid list 
2140    to find a matching fid that we have already crossed.  we must also 
2141    reset the fid count based upon what we discover.
2142
2143  * Cell names are published as share names.  As a result they are searched
2144    for as part of the Dfs Referral evaluation.  If share "foo" can not be
2145    reached, the CIFS client will fallback to searching for "fo" as well.
2146
2147    Since the freelance client automatically adds a symlink for prefixes
2148    of the cell name, this results in both "foo" and "fo" being added to
2149    the freelance root.afs volume.  This patch prevents that negative side
2150    effect.
2151
2152  * when tracking Kerberos credential cache names be sure to include 
2153    the cache type prefix.
2154
2155  * Microsoft has assigned OpenAFS a network type value
2156
2157  * The algorithms that were used to produce a Netbios name were broken.
2158    The name that was produced when the hostname was too long was in fact
2159    longer than the maximum permitted netbios name.
2160
2161    Also, the "NetbiosName" value was not used as a suffix when the loopback
2162    adapter was not installed.  The hardcoded string "AFS" was used instead.
2163
2164  * avoid another deadlock during server probes initiated by the ipaddr 
2165    change daemon thread.
2166
2167  * prevent the afs client service from crashing when fs newcell is 
2168    executed
2169
2170  * In the NSIS installer, move afslogon.dll, afscpcc.exe and afs_cpa.cpl 
2171    to \Program Files\OpenAFS\Client\Program in order to get them out
2172    of the %windir% tree
2173
2174  * EDQUOT == WSAEDQUOT.   Define it in the right places so that in the 
2175    end STATUS_OUT_OF_QUOTA can be returned to the application.
2176
2177  * Modify the search order for determining the location of CellServDB
2178    and other client configuration files.
2179
2180    1. AFSCONF environment variable
2181    2. registry setting
2182    3. NEW - use All Users\AppData\OpenAFS\Client only if CellServDB exists
2183    4. use Program Files\OpenAFS\Client
2184
2185  * More Vista Power Management tweaks
2186
2187  * Close a socket handle leak in the kauth routines
2188
2189  * Don't hold a cm_volume_t mutex across RPCs
2190
2191  * Convert downTimes to use clock time instead of relative times.
2192    This permits correct comparisons with expiration times.
2193
2194  * Update the Wix installer to properly install the prerequisites 
2195    for translate_et.exe
2196
2197  * Do not translate pioctl paths as they are not converted by the
2198    file system stack.
2199
2200  * Implement multi_rx probes for checking whether servers are up
2201    or down.  Turns probes into a constant time activity instead 
2202    of one dependent upon the number of known servers.
2203
2204  * Treat VNOVOL errors the same as VOFFLINE.  Do not force an
2205    update of the volume location data and retry.  VNOVOL means
2206    that the volume could not be attached.  It doesn't mean that
2207    the volume is not on this server.
2208
2209  * Modify the Explorer Shell AFS Context menu Symlink->Add to
2210    not attempt to validate the target path.   There is no reliable
2211    method of doing so.
2212
2213  * Improve performance of \\afs\<cell><mount-type><volume>\
2214    access by eliminating extraneous attempts to search the 
2215    CellServDB file and DNS AFSDB records.  Share names 
2216    containing '%' or '#' are not valid cell names.
2217
2218  * Return STATUS_RANGE_NOT_LOCKED if the application attempts
2219    to unlock a range that is not currently locked.
2220
2221  * Enable the 32-bit tools to read the 64-bit registry keys
2222    when executing in the WOW64 environment.
2223    
2224
2225 Since 1.5.29
2226  * Fix buffer refcount leak introduced in 1.5.29
2227
2228  * Prevent the NIM AFS Provider from crashing when configured to use 
2229    Kerberos v4 for token acquisition in situations where no Kerberos v4
2230    support is available.  For example, 64-bit KFW or sites that delete
2231    the Kerberos v4 DLL.
2232
2233  * In afsd_init.log, support logging cache sizes greater than 2GB.
2234
2235  * The volume status output of "fs examine" was being determined based
2236    upon the wrong error value.  Instead of using the pioctl() return
2237    code, the errno value must be used.  
2238
2239  * Prevent invalid pts auto-registration attempts by aklog and the 
2240    NIM afs provider when Kerberos referrals are in use.  (krb5 1.6+)
2241
2242  * Add synchronization protection to all of the SMB Listener State 
2243    variables.  This prevents race conditions when the addition or
2244    loss of a network adapter takes place.
2245
2246  * On Vista, there is a race condition between the restart of the 
2247    afs client service and the network adapters.  Ensure that the 
2248    afs client service can handle switching between loopback and 
2249    non-loopback modes of operation.
2250
2251  * Fix FollowBackupPath to work with mount points that are not 
2252    explicitly read/write.
2253
2254  * Fix a deadlock that has been observed on Vista while resuming
2255    after at least four hours of sleep.
2256
2257  * Add new HKLM registry configuration options that can be used 
2258    to provide configuration hints to the NIM AFS Provider when 
2259    creating new identities.  See release notes for details on
2260    HKLM\SOFTWARE\OpenAFS\Client\Realms\.
2261
2262 Since 1.5.28
2263  * Speed up write buffer operations by holding a global read-lock
2264    instead of a write-lock when updating the buffer data version 
2265    number.  The data version is protect by the associated stat
2266    cache mutex.
2267
2268  * Speed up read buffer operations by removing out of date buffers
2269    from the buffer hash tables.
2270
2271  * Protect against a null pointer dereference in afslogon.dll
2272    if QueryAdHomePathFromSid() fails.
2273    
2274  * Remove a race condition while accessing private freelance data
2275    structures.
2276
2277  * Update the buffer data versions when Freelance directory data
2278    changes.
2279
2280  * Complete the implementation of smb_ReceiveTran2GetDFSReferral().
2281    Critical for Vista.  
2282
2283  * Return EAS_NOT_SUPPORTED in response to EA read/store/query 
2284    instead of returning zero length.
2285
2286  * Return ERROR_RETRY when a server sends VBUSY.
2287
2288  * Return PATH_NOT_COVERED instead of BADSHARENAME for DfsLinks when
2289    a volstat plug-in is in use.
2290
2291  * Enhance the volstat interface to support Dfs path mappings.
2292
2293  * Fix "symlink list" to do the right thing for Dfs links
2294
2295  * Fix callback expiration that was broken in 1.5.27.
2296
2297  * Fix a crash at shutdown caused by the lack of synchronization
2298    within the daemon threads (cm_Daemon, cm_BkgDaemon, cm_IPAddrDaemon)
2299
2300  * Hold the cm_server_t mutex while walking or modifying the 
2301    cm_server_vols_t list in order to avoid a race condition.
2302
2303  * Ensure that the cm_server_t refCount is safely modified.
2304
2305  * The pthread library implementations of pthread_cond_wait
2306    and pthread_cond_timedwait were failing to return with 
2307    the mutex held when error conditions occurred.  This could
2308    result in race conditions wherever they are used.  One case
2309    in which problems were seen was the Rx event_handler().
2310
2311  * Prevent cm_GetBuffer() from locking all buffers associated with 
2312    a stat cache object before deciding if the current buffer is up 
2313    to date.
2314
2315  * Fix cm_BkgPrefetch to actually ensure that there is a cm_buf_t 
2316    object for each offset that we will attempt to reserve.
2317
2318  * Reduce the default number of background daemon threads used to 
2319    prefetch or store to one in order to prevent two or more threads 
2320    from stepping on each other.
2321
2322  * Reduce the default chunk size to 256KB in order to prevent read 
2323    timeouts on low bandwidth connections.
2324
2325  * Fix a race condition that could result in threads becoming stranded 
2326    when synchronizing multiple requests on the same stat cache object.
2327
2328 Since 1.5.27
2329  * The GiveUpAllCallBacks functionality that was added in 1.5.21
2330    has been disabled.  It has been disabled because it turns out
2331    that the RPC is improperly implemented in all file servers 
2332    previous to 1.4.6.  The RPC is executed without the proper 
2333    locks being held resulting in data corruption and eventual file
2334    server failure.  The functionality will be re-enabled in a 
2335    a few months.
2336
2337  * a couple of .readonly Volume Callback optimizations were 
2338    implemented:
2339    -  Apply most recent volume callback to all stat cache objects 
2340       in the volume.  This avoids premature callback expirations 
2341       and unnecessary FetchStatus calls.
2342    - Add option to permit attempts to renew .readonly Volume 
2343      Callbacks on a periodic basis to avoid invalidation of stat 
2344      cache data.  [Requires daemonCheckVolCBInterval be set to 
2345      non-zero number of seconds.  1800 (30 minutes) is suggested.]
2346
2347  * Adds support for 64-bit data version values.  Previous releases 
2348    only supported 32-bit values.  Larger values sent by the file server 
2349    would result in rollover.
2350
2351  * aklog and asetkey no longer generate an exception if Kerberos for 
2352    Windows is not installed.
2353
2354  * If the LSA authentication functions report a temporary out of memory 
2355    condition, fail the current authentication and do not cause the AFS 
2356    client service to terminate unexpectedly.
2357
2358  * When the AFS client service is shutting down, prevent the daemon check 
2359    thread from executing additional checks which might attempt to access 
2360    discarded locks or unmapped memory.
2361
2362  * Correct a double free condition in the NIM AFS credentials provider.
2363
2364  * Add "FollowBackupPath" service parameter registry value.   
2365    This provides equivalent functionality to the UNIX afsd -backuptree
2366    option.  When set to a non-zero value, normal mount points originating
2367    in a .backup volume will prefer a .backup volume.
2368
2369 Since 1.5.26
2370  * Fix NSIS uninstall from the .MSI installer.
2371
2372  * Add Stack Frame logging for AMD64
2373
2374  * Add support for EWOULDBLOCK to cm_Analyze.  If the file 
2375    server returns EWOULDBLOCK, retry the request every two 
2376    seconds for up to the RDRtimeout.
2377
2378  * Reorganize the order of the includes to ensure that EWOULDBLOCK 
2379    is not assigned the same value as EIO.
2380
2381  * Update CellServDB to GCO Public 25 Oct 2007
2382
2383  * Add additional validation and error handling code after 
2384    each call to getSlot().  If an invalid slot is returned, 
2385    return NONODE.  If the invalid slot is returned when 
2386    extracting a data node, invalidate the tree.
2387
2388  * Modify compareKeys() to always perform a case-insensitive 
2389    comparison and only perform a case sensistive comparison 
2390    if the case-insensitive one matches.  This ensures the 
2391    ordering is consistently reported.
2392
2393  * Add lock assertions to ensure that all calls are being 
2394    performed with the correct locks being held.  There have been 
2395    some crash reports that provide stack data that does not appear 
2396    to be possible unless there is a race.  However, there are no 
2397    obvious locations where the race is taking place and the test 
2398    suite indicates that all of the correct locks are being held. 
2399    We shall see what happens in the field.
2400
2401  * For consistency replace all calls to findKey in which the range i
2402    s (1,numentries) with calls to getSlot().
2403
2404  * Optimize the depth search loop by testing the slot value in the 
2405    for statement instead of forcing the loop to be broken later.
2406
2407  * Reorganize the locking for cm_BeginDirOp and cm_EndDirOp.
2408    There are a number of locations where locks are obtained, dropped, 
2409    and reobtained.  This reorganization attempts to accomplish several 
2410    things:
2411
2412    (1) be optimistic for the most common case so it will be fast
2413
2414    (2) add consistency checks after each location where locks are 
2415        dropped and re-obtained.  If we lose a race in cm_BeginDirOp 
2416        and the bplus tree is out of date, retry until we get to a 
2417        consistent state that we can use.
2418
2419    (3) Ensure that all operations take place with the correct locks.
2420
2421  * One of the issues that has become a serious problem since the 
2422    addition of the local directory updates is that although cm_SyncOp 
2423    synchronizes operations, it does not preserve the order of requests. 
2424    This has always been a problem in that it has been possible for a 
2425    request to fail to complete due to its worker thread's bad luck. 
2426    When a request takes longer than the Windows SMB Redirector's timeout, 
2427    the SMB Redirector tears down the SMB virtual circuit. 
2428
2429    When using the local directory updates it is really important that 
2430    the directory update operations complete in the order that they were 
2431    sent to the file server. If they don't, then the local directory state 
2432    and the file server state will not match and the local directory state 
2433    must be discarded which in turn forces a new read of the entire 
2434    directory contents over the network. 
2435
2436    This patch adds a new cm_scache_waiter_t object that is used to store 
2437    the current thread, buffer, and syncop flags within a waiters queue 
2438    on each cm_scache_t object. If a thread is forced to sleep in 
2439    cm_SyncOp, upon waking it will check to see if there are any other 
2440    threads waiting that are attempting to perform a similar task ahead 
2441    of it in the queue. If yes, the thread goes back to sleep. If not, 
2442    it goes ahead and enters the cm_SyncOp conflict resolution block. 
2443
2444    This patch has the additional side effect of reducing the number of 
2445    competing threads that must obtain the cm_scache_t mutex and process 
2446    the cm_SyncOp conflict resolution block. As a result, the overall CPU 
2447    utilization of the service and the clock time associated with processing 
2448    requests will be reduced.
2449
2450  * assert that the cm_scache_t mutex is held when calling
2451    buf_ForceDataVersion().
2452
2453  * rename findNode to leafNode in bplus_Lookup
2454
2455  * replace all OutputDebugString calls with osi_LogX calls
2456
2457  * modify bestMatch to special case the return values for leaf nodes.
2458    If an entry is above or below the values available in the leaf node
2459    return BTLOWER or BTUPPER instead of BTERROR.
2460
2461  * In insert and delete operations check for BTLOWER/BTUPPER and isleaf,
2462    if true convert to either slot 0 or Max and perform the insertion.
2463    This produces easier to read code when performing lookups.
2464  
2465  * modify lock_AssertXXX macros to call osi_assertx() and provide a
2466    descriptive message.
2467
2468  * the difference between osi_assert() and osi_assertx() is whether or not
2469    a description is specified as part of the call.  When no message is
2470    specified afsd_notifier() is called with a NULL msgp parameter.  This
2471    results in a null pointer dereference during the EventLog() call.
2472
2473    As a result, none of the information describing the assertion is written
2474    to the log file.
2475
2476    This commit sets a default message for use when no other message is
2477    provided and it replaces all calls to osi_assert with osi_assertx and
2478    adds descriptions.
2479    
2480  * Migrate B+ tree search key into thread local storage
2481
2482 Since 1.5.25
2483  * Fix an uninitialized variable in lana_IsLoopback() which 
2484    could result in a random determination that a loopback 
2485    adapter is not a loopback adapter.  This would result in 
2486    a computed Netbios service name of %MACHINE%-AFS instead
2487    of AFS.  This is a serious problem if the value computed
2488    by the AFS Client Service and the client process pioctl
2489    calls produce different results as it will result in a  
2490    communication failure.
2491
2492  * Fix a crash in the B+ Tree code that results when a file
2493    rename only results in a change of case.
2494
2495  * Fix the pioctl path parsing.  The previous algorithm 
2496    broke the current directory of the client into two parts,
2497    the TIDpath which represented the device root and the
2498    relative path.  The problem is that this is not sufficient
2499    from proper processing of symlinks and mount points.  
2500
2501    What is required is that the last component of the path
2502    must not have the symlink or mount point be evaluated
2503    whereas symlink and mount point evaluation must be performed
2504    for the rest of the relative path.  Therefore, the path is
2505    now split into three parts: TIDpath, intermediate path,
2506    and last component.  
2507
2508    "fs examine" now reports the data of the symlink or mount
2509    point object instead of the target and "symlink list" and
2510    "symlink remove" now works.  The "Explorer Shell Extension"
2511    menu now is displayed for symlink objects.
2512
2513  * More informative symlink.exe error messages.
2514
2515  * When the cmd.exe "del" command is used to remove a symlink,
2516    not only was the link object removed, but the stat cache
2517    object for the target was marked deleted.  This resulted
2518    in cache corruption which would require the destruction
2519    of the cache to correct.
2520
2521  * Add undocumented registry value, "OfflineReadOnlyIsValid"
2522    which results in cached contents from read only volumes
2523    to be treated as valid when there is no callback registered
2524    and all servers are down or all instances are offline.
2525
2526    HKLM\SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters
2527
2528  * Add documented registry value, "AcceptDottedPrincipalNames"
2529    which is used to permit the acquisition of AFS tokens 
2530    using Kerberos v5 principal names which include a dot in
2531    the first component.
2532
2533    {HKLM\HKCU}\Software\OpenAFS\Client
2534
2535  * "fs uuid" does not require "AFS Client Administrator" group
2536    membership to display the current UUID value.
2537
2538 Since 1.5.24
2539  * Update NSIS installer to version 2.30
2540
2541  * Update Wix installer to version 2.0.5325
2542  
2543  * 64-bit KFW support:
2544    - Network Identity Manager plug-in
2545    - 64-bit aklog
2546    - 64-bit krb5 enable afscreds.exe, afs server manager,
2547      etc.
2548
2549  * Enable B+ tree Directory Search by default.
2550
2551  * NIM plug-in is now compatible with FILE: ccaches
2552
2553  * Install instloop.exe into Client/Programs/ even though
2554    it isn't required.   Permit it to be used by organizations
2555    that clone Windows systems.
2556
2557  * On a suspend, only drop callbacks for servers that 
2558    are online.  If the server is offline, maintain the callback
2559    until the server is once again available.
2560
2561  * Prevent against acquisition of a directory write lock when
2562    there are no updates to be performed.  This was resulting 
2563    in a write-lock leak which later on would lead to a deadlock.
2564
2565  * Add configurable file pre-fetch mode.  For files that match
2566    the specified file extensions, pre-fetch the entire file into
2567    the cache.
2568
2569    HKLM\SYSTEM\CurrentControlSet\Services\TransarcAfsDaemon\Parameters
2570       (MULTI_SZ) PrefetchExecutableExtensions
2571
2572  * Fix the client_osi large integer support so that return values
2573    can be properly assigned to large integer variables.
2574  
2575  * Do not hold cm_scache_t mutex across cm_GetCell() calls 
2576    since cm_GetCell() can block in a RPC.
2577
2578  * Add short file name support to B+ tree searches.
2579
2580  * Resolve a conflict between the desire to notify file servers
2581    that the client workstation is suspending and the desire to
2582    permit objects with valid callbacks when the client suspends
2583    to continue to use those objects from the cache if the client
2584    resumes without network connectivity.
2585
2586  * Fix stack variables to ensure that all buffers storing paths
2587    can handle AFSPATHMAX (1024) characters.  Paths of 256 characters
2588    would cause a stack overflow condition.
2589
2590  * On Vista, force afs_config.exe to run with the highest privileges
2591    available to the end user.  For a user in the Administrators
2592    group running under UAC, this will cause afs_config.exe to be 
2593    be run with full Administrators privileges after the user 
2594    approves the privilege escalation.
2595
2596  * More VNOVNODE handling issues.  If a dirty buffer cannot be 
2597    written due to VNOVNODE, clear the buffer and ignore the error.
2598    If a cm_scache_t object has been marked deleted due to a VNOVNODE
2599    error, the next time the smb_fid_t object that references it is 
2600    used return either NOSUCHFILE or NOSUCHPATH and close the
2601    smb_fid_t object.  Subsequent attempts to use the smb_fid_t will
2602    result in an invalid handle error.
2603
2604  * For Vista, set the RequestExecutionLevel of the NSIS installer
2605    to "admin".
2606
2607  * For the build environment, support the generation of manifests
2608    when using the CL1310 (VS .NET 2003) compiler/linker.
2609
2610  * There was a bug in OutputDebugHexString() which could overflow
2611    a stack buffer resulting in unexpected process termination
2612    of afsd_service.exe if the input Security Token contained
2613    many bytes equivalent to the '%' char.
2614
2615  * Add directory lookup statistics to "fs memdump" output.
2616  
2617
2618 Since 1.5.23
2619  * Windows uses case-insensitive file name pattern matching
2620    but AFS is a case sensitive file system.  The AFS3 directory
2621    format is block based, uses network byte order and 
2622    includes a hash table for fast case sensitive lookups.  
2623    This causes several problems for the Windows AFS client.
2624    (1) Traversing the directory blocks is cpu expensive
2625    (2) A hash table miss does not indicate that the desired
2626        entry does not exist.
2627    (3) Determining whether a non-ambiguous inexact match or
2628        the entry does not exist requires a linear traversal
2629        of the entire directory.  
2630    These issues often result in 100% CPU utilization.
2631
2632    These issues are addressed by building a modified B+ tree for 
2633    each directory and then using the B+ tree for searches.
2634
2635    This feature is disabled by default.  To enable it set
2636    the "BPlusTrees" registry value to 0x01 in the AFS Client
2637    Service Parameters key.
2638
2639  * Correct a null pointer dereference in the symlink recursion
2640    detection code.  (Introduced in 1.5.22)
2641
2642  * Add the Network Identity Manager AFS Provider to AMD64 
2643    builds.
2644
2645 Since 1.5.22
2646
2647  * A new registry value, "BlockSize", can now be used to adjust 
2648    the size of the internal buffers used to store file data.  
2649    The default is 4KB.  When set, the values 1..1024 specify
2650    multiples of 4KB. Values > 1024 specify actual block sizes
2651    and must be multiples of 4KB.  The actual block size in KB 
2652    can not be larger than the chunk size which defaults to 1MB.
2653
2654     HKLM\SYSTEM\CurrentControlSet\Services\TransarcAfsDaemon\Parameters
2655       (DWORD) BlockSize
2656
2657  * pts.exe and ptserver.exe built with -DSUPERGROUPS
2658
2659  * Service Manager shutdown hints have been added.  The hint 
2660    specifies that it may take the AFS client service up to two
2661    minutes to shutdown. 
2662
2663  * Fix the recursion detection feature introduced in 1.5.22.
2664    The previous implementation broke the evaluation of paths
2665    using ../path or ./path.   It also broke the evaluation of
2666    symlinks to absolute paths.  For example, /afs/cell/path.
2667
2668  * Fix an uninitialized variable in cm_MakeDir that could result
2669    in crash if the requested directory could not be created.
2670
2671  * Fix a the VolumeStatusNotification log messages to save
2672    the input string in the circular log buffer so garbarge 
2673    won't be output to afsd.log when the log is dumped.
2674    
2675
2676  * Increase the SMB Maximum Path length to 260 characters
2677    from 256 as that is what CIFS supports.
2678
2679  * On 64-bit Windows, use a unique description string for 
2680    the 32-bit AFS Shell Extension.
2681
2682 Since 1.5.21
2683
2684  * In the AFS Admin Library, replaced all of the 
2685    Ubik_Call(XXX_RPC,...) calls with Ubik_XXX_RPC(...).  This 
2686    allows parameter checking and proper type conversions to be
2687    performed.  This is crucial when passing parameters that are
2688    64-bit wide on systems in which 'long' is a 32-bit value.
2689    Otherwise, the parameter list on the stack is interpretted
2690    incorrectly and the function not only doesn't succeed but it
2691    might corrupt memory and if lucky crash the application.
2692   
2693    The only program that we care about that uses this library 
2694    is the AFS Server Manager.  Now it doesn't crash.
2695
2696  * Fixed smb directory searches for non-wildcard names.  The 
2697    optimized function should not have set the bulk in progress
2698    flag.  This would adversely affect later directory searches
2699    that required a bulk search.
2700
2701  * Detect infinite recursions (up to 512 stat cache objects
2702    in a chain.)  If an infinite recursion is detected, return
2703    an error to stop the CIFS client from querying us forever.
2704
2705  * Executables executed out of AFS name space can have their
2706    pages swapped out by Windows.  Those pages will be reloaded
2707    when they are required.  However, if the cache manager no
2708    longer has a callback and all of the file servers with 
2709    the volume data are down, then the application will crash
2710    due to the inability to read the required page.  
2711
2712    We now track the down time of each server.  If the callback
2713    expires after the server that issued it went down and all
2714    servers are down, we delay the expiration to permit the data
2715    in the cache to be continue to be used by Windows or an 
2716    application.
2717
2718  * The Windows AFS client has always had very poor performance
2719    with regards to directory management.   In the case of 
2720    directory updates caused by create, rename,and delete operations,
2721    the AFS cache manager will now perform local directory updates
2722    when possible in order to avoid re-reading the directory from
2723    the file server.  This will be done in whenever both of the 
2724    following conditions are true:
2725
2726    - the data version on the directory increased by one as a 
2727      result of the operation
2728
2729    - all of the directory buffers necessary to make the change
2730      are present in the cache
2731
2732  * The error message in the AFS Control Panel describing the 
2733    need to be a Windows Administrator has been replaced with
2734    a message describing the need to be in the AFS Admins Group.
2735
2736  * If the vldb server list is empty when attempting to evaluate
2737    a cell mountpoint it was possible for a crash to occur.  This
2738    can only happen if there is an existing mount point and the
2739    is a failure attempting to load the server list from the 
2740    CellServDB file or via AFSDB queries.
2741
2742  * dirty buffers only have their dirty bytes stored to the file
2743    server instead of the entire chunksize
2744
2745  * the default chunksize has been increased from 128KB to 1MB
2746    
2747
2748 Since 1.5.20
2749
2750  * changed the enum values for cm_serverRef_t state info to use a 
2751    private name space to avoid collisions (srv_)
2752  
2753  * added a srv_deleted state for cm_serverRef_t objects.  This 
2754    state is set when cm_FreeServerList() is called with the 
2755    CM_FREESERVERLIST_DELETE flag set.  cm_FreeServerList() may
2756    not always delete the cm_serverRef_t from the list if it is
2757    still in use by another thread.  the srv_deleted state means
2758    the object's contents are no longer valid and it must be 
2759    skipped.  It will be deleted the next time the object is 
2760    freed and the refcount hits zero.
2761  
2762  * the srv_deleted state is also used when a file server reports
2763    either VNOVOL or VMOVED instead of marking the cm_serverRef_t
2764    as offline.  This is done to prevent additional usage of the 
2765    stale vldb data while waiting for the update volume request
2766    to complete.
2767  
2768  * added a state field to the cm_volume_t object (enum volstate 
2769    vl_ name space) that maintains the state of the volume based
2770    upon the states of all of the cm_serverRef_t and cm_server_t
2771    objects.
2772  
2773  * modified cm_UpdateVolume() to set the state of the cm_volume_t
2774    RW, RO, and BK to either vl_alldown or vl_online.  There can't
2775    be any other states because cm_UpdateVolume() destroys any  
2776    previous knowledge we might have had regarding busy or offline
2777    volume status
2778  
2779  * modified cm_UpdateVolume() to update the volume name in the 
2780    cm_volume_t to the volume base name if the previous value was 
2781    a volume ID.
2782  
2783  * modified cm_FollowMountPoint() to check to see if the volume
2784    name is a volume ID and if so call cm_GetVolumeByID instead 
2785    of cm_GetVolumeByName.  This ensures that volume IDs are always
2786    looked up as numeric values.  There is no longer a need to 
2787    maintain a separate cm_volume_t containing the string representation
2788    of the ID value.
2789  
2790  * Added a flags parameter to cm_GetVolumeByName() and cm_GetVolumeByID().
2791    The first flag is a "CREATE" flag which is set by all existing
2792    calls.  The flag is not set by calls to cm_GetVolumeByID() from
2793    the server probe code when volume status is being updated.  We 
2794    do not want the server probe operation to result in additional 
2795    turnover in the cached volume data.  The second flag is NO_LRU_UPDATE 
2796    which is set when the server probe code updates the volume status.
2797    This flag will be used to prevent the server probe operation from
2798    changing the order of the least recently used queue.
2799  
2800  * Modified cm_GetVolumeByName to ensure that only one cm_volume_t is 
2801    allocated for a given set of normal, readonly, and backup volumes
2802    regardless of whether or not the volume is accessed via name or 
2803    ID number.  The cm_volume_t namep field is always the base name
2804    of the volume. 
2805  
2806  * Added a new volume state, vl_unknown.  This state is used as
2807    the initial state for all cm_volume_t when the cache manager starts, 
2808    for each cm_volume_t at creation, and for each cm_volume_t when
2809    recycling.  The cache manager does not know the state of all 
2810    volumes in the world, only those that are in the cache and for
2811    which it has queried the VLDB and hosting file servers.
2812  
2813  * modified cm_GetVolumeByName() to initialize the state of a 
2814    volume to vl_unknown.  The actual state will be set when a 
2815    cm_VolumeUpdate() call completes successfully.
2816  
2817  * changed name of scache hash table variables to avoid ambiguity
2818    when adding hash tables for volumes
2819  
2820  * fix a buffer overrun in sys\pioctl_nt.c  pioctl().
2821  
2822  * modified cm_UpdateVolume() to handle the case in which there is
2823    no RW volume but there is are RO volumes for a given base name. 
2824    This is done by querying for the ".readonly" volume name if the 
2825    base name does not exist in the VLDB.  We never query for the
2826    .backup name because under the current usage model a .backup 
2827    volume may only exist on the server that the read-write volume
2828    is located.  If there is no RW volume, there can be no .backup.
2829  
2830  * Added four hash tables for cm_volume_t objects to improve the 
2831    search time of cm_GetVolumeByID(), cm_GetVolumeByName() and
2832    cm_ForceUpdateVolume(). One each for Name, RWID, ROID, and 
2833    BKID.  Three ID hash tables are necessary as long as it is
2834    desireable to maintain a single cm_volume_t containing all
2835    of the related RW, RO, and BK volume data.  Having the RW and
2836    RO volume data in the same object is necessary for the 
2837    implementation of cm_GetROVolumeID() which returns either the
2838    RO or RW ID depending upon the existence of RO volume instances.  
2839  
2840  * Added a volume LRU queue so that volume reuse becomes fairer.
2841    This does not replace the all Volumes list which is used when
2842    it is desireable to walk a list of all the volumes whose order
2843    is not going to change out from underneath you which makes it
2844    safe to drop the cm_volumeLock.
2845  
2846  * handles volume hash table updates where volume name to 
2847    volume ID number changes.  The volume name remains 
2848    constant in the cm_volume_t.  if a vos rename is performed, 
2849    the name of the volume will change and the volume IDs will be 
2850    updated.  Subsequent access to the old volume ID will create a 
2851    new cm_volume_t with the new name.
2852  
2853  * Added a daemon thread operation to query the state of volumes
2854    listed as busy or offline.  cm_CheckBusyVolumes() calls 
2855    RXAFS_GetVolumeStatus() for each volume ID that is marked vl_busy 
2856    or vl_offline.   If the volume is now online, the status on the
2857    volume is updated.  The default period is 600 seconds.  This can 
2858    be configured with the BusyVolumeCheckInterval registry value.  
2859  
2860  * Added prototype for smb_IoctlPrepareRead() which was missing a
2861    return type in the function definition.
2862  
2863  * Added volume id lists to the cm_server_t.  These lists are
2864    allocated in blocks of ~32 IDs.  When a cm_PingServer() 
2865    detects a change in server state, the state of the cm_volume_t
2866    is updated.  
2867  
2868  * Added volID to the cm_serverRef_t object.  volID is used
2869    to identify the volume for which the object is a referral.
2870    cm_FreeServerList() uses the volID to remove the volume 
2871    from the cm_server_t.
2872  
2873  * In cm_Analyze, when VNOVOL or VMOVED are received, 
2874    call cm_ForceVolumeUpdate() to force a refresh of the volume 
2875    location data.
2876  
2877  * Added cm_VolumeStatusNotification() which is used at the moment
2878    to log volume status changes to the trace log.  It will also
2879    be used as the access point to the File System Filter driver
2880    notification engine.
2881  
2882  * Added an all cm_scache_t list to cm_data.  This replaces the use
2883    of the stat cache LRU queue when we need to enumerate all 
2884    entries.  The LRU list order is not static and when using it to 
2885    enumerate all entries it can result in items being missed or
2886    items being processed more than once.
2887  
2888  * Modified cm_Analyze(). Instead of reseting the busy or offline
2889    state of a volume and forcing a retry of the operation
2890    cm_Analyze will defer to the background daemon thread that will
2891    update the state once every 600 seconds.
2892  
2893  * Added the automatic generation of a Freelance ".root" read-write
2894    mountpoint that refers to the root.afs volume of the workstation
2895    cellname at the time the mountpoint is created.
2896  
2897  * re-write cm_Analyze to make better use of the known volume
2898    status.  VL_Server queries cannot result in CM_ERROR_ALLOFFLINE
2899    messages.
2900  
2901  * renamed cm_CheckBusyVolumes to cm_CheckOfflineVolumes.  
2902    busy volumes will be reset to srv_non_busy by the function
2903    but there is no mechanism for querying the busy state other
2904    than by attempting to access the resource.
2905  
2906  * cm_Analyze will query the state of an offline volume before
2907    deciding whether or not to retry when all volume instances
2908    are offline.
2909  
2910  * the algorithm used after an IP address list change detection
2911    has been modified.  we now check the state of the VLDB servers,
2912    then reset the rx connections, and finally check the state of 
2913    the file servers.  Previously we flushed the rx connections 
2914    and then checked the servers in whatever random order they 
2915    were first discovered.
2916  
2917  * fix the volume status reported by "fs examine"
2918  
2919  * various improvements to the AFS Network Identity Manager Provider.
2920    - Don't access freed objects after the window has been destroyed.
2921    - Write back the AFS cell list in the identity configuration 
2922      even when its empty.
2923    - Disable all use of the provider when AFS is disabled for a 
2924      particular identity.
2925  
2926  * Fix cm_cell_t leak.  When evaluating a mountpoint that uses an
2927    alias instead of the full cellname, double check the full cell
2928    name and see if we have a matching cell before allocating a new
2929    one.
2930  
2931  * Dump more data with "fs memdump". All volumes and scaches and
2932    now cells.
2933  
2934  * Reverse the order of the all cells list.  This ensures that
2935    the workstation cell is always first in the list.
2936  
2937  * If we recognize the server from which a callback revoke was
2938    received, then we can ensure that we only invalidate the status
2939    information for cm_scache_t objects belonging to that cell.
2940  
2941  * When building for amd64, use APPVER 5.02 as we do not support
2942    64-bit Windows 2000 and explicitly state the machine type in
2943    the link flags.  
2944  
2945  * no longer treat VMWare network adapters as equivalent to a 
2946    loopback adapter.  For some unknown reason, publishing the "AFS"
2947    netbios name on them frequently results in a name collision 
2948    error.
2949  
2950  * Use read locks whenever possible instead of write locks when
2951    walking the allCellsp list.  This permits better use of multiple
2952    CPUs.
2953  
2954  * In 1.5.20 a bug was introduced by the fake status when PRSFS_READ
2955    is not present on the directory optimization.   It would report
2956    mount points and directory objects for which there was no
2957    status information as a zero length file.  Instead we can use 
2958    the vnode number of the object to determine if it should be
2959    considered to be a directory or a file.  If it is odd it is a
2960    directory; even it is a file.
2961  
2962  * Give Back Callbacks to the file servers in response to suspend
2963    and shutdown power management events.  Only give up callbacks
2964    to UP servers and do so with a very short RX dead timeout.
2965    (10 seconds)
2966  
2967  * Fix a race condition in the SMB FID cleanup code that could 
2968    result in a stat cache mutex never being released.
2969  
2970  * Fix the graphics files that are installed as part of the 
2971    IBM Administrators Guide.
2972  
2973  * Change the behavior of pioctl path parsing to not follow 
2974    symlinks or mount points during evaluation.  This results in
2975    the FID being the symlink or mount point and not the object
2976    they point to.  This is consistent with the behavior of the 
2977    UNIX client.
2978
2979  * Enable AFSDB record lookup for command line tools such as
2980    "fs" and "vos".
2981
2982  * CellServDB update 2007-07-05
2983
2984  * Added a Volume Status Plug-in Interface that permits third parties
2985    to receive notifications when the volume state changes occur.
2986
2987  * Ensure that all writes to the afsd_alloc.log file use CR-LF.
2988
2989  * Prevent the afsprocmgmt.dll from being unloaded while the 
2990    background thread it starts is running.
2991
2992  * Avoid a race condition when closing smb_fid_t objects.
2993
2994 Since 1.5.19
2995  * fix install path of IBM Quick Start Guide when installed by
2996    the Wix installer
2997
2998  * fix the client so that it can write into directories with
2999    only 'li' permissions.
3000
3001  * fix installation of 32-bit Shell Extension for 64-bit systems.
3002    Install it under its own HKCR keys.
3003
3004  * modify the wix installer to remove and upgrade install packages
3005    with the same version number.  
3006
3007  * when flushing volume location data every two hours or in 
3008    response to "fs checkvolumes", also flush the mount point 
3009    links in order to force their re-evaluation.
3010
3011  * aklog was copying an uninitialized buffer as part of the 
3012    foreign cell automatic pts registration
3013
3014  * when obtaining directory listings, check for read permission
3015    on the directory.  If read permission does not exist, fake the
3016    status information for the directory entries.  This improves
3017    performance, prevents the client from pounding the file server,
3018    and prevents leakage of cached status information.
3019
3020  * "fs getcacheparms" output was incorrect.
3021
3022  * NetIdMgr AFS Provider should only automatically add token 
3023    acquisition for cell foo.com if the realm of the cell matches
3024    the realm of the identity.
3025
3026  * Fix a null pointer dereference in cm_MergeStatus()
3027
3028 Since 1.5.18
3029
3030  * network identity manager provider:
3031
3032    - Correct for the fact that pr_CreateUser tampers with the 
3033      contents of the username input buffer.
3034
3035    - Take into account that the krb4 credential data structure
3036      does not have separate realm fields for the user and service.
3037      When krb524 is used with a cross-realm ticket, the realm
3038      describes the service not the user.  
3039
3040  * Many integrated logon changes:
3041
3042    - Fix eventlog reporting.  Do not attempt to log an event 
3043      if the event source registration fails.  Use DebugEvent0 
3044      instead of DebugEvent when there are no parameters.
3045
3046    - Modify the LOOKUPKEYCHAIN macro to recognize ERROR_MORE_DATA 
3047      errors.
3048
3049    - Fix the reading of Domain specific configuration for 
3050      LogonScript and TheseCells.  Previously the dwSize value was 
3051      being overwritten so that subsequent RegQueryValueEx call 
3052      would fail.
3053
3054    - Fix a memory leak in the TheseCells reading code.
3055
3056    - Add support for Domain specific "Realm" specification.  The 
3057      realm is the realm to be appended to the username.  When 
3058      logging in as a domain or to the local machine, the specified 
3059      "Domain" name is not going to be a valid realm name.
3060
3061    - Construct a proper principal name based upon the domain 
3062      specified realm for use in obtaining tokens with KFW.
3063
3064    - If the domain specified "TheseCells" list includes the 
3065      default cell, do not obtain tokens twice.
3066
3067  * An unprotected call to the Kerberos v5 function, 
3068    krb5_free_context(), can result in an invalid memory access
3069    exception if the contents of the krb5 profile, krb5.ini, cannot
3070    be parsed correctly.  The error is located within the afskfw
3071    library which is used by afscreds.exe, afssvrmgr.exe, and 
3072    afslogon.dll.  When the error is triggered within afslogon.dll
3073    a blue screen condition can occur when the winlogon.exe system
3074    process terminates unexpectedly.
3075
3076 Since 1.5.17
3077
3078  * Do not stop the afs client service with an assert
3079    if the cell name cannot be determined when responding
3080    to a "fs whereis" command.
3081
3082  * Integrated Logon (afslogon.dll).  No longer attempt 
3083    to preserve Kerberos 5 tickets for the logon session
3084    as that job is now supported by KFW 3.1 and above.
3085
3086  * The Network Identity Manager plug-in will attempt to
3087    remove expired service tickets from the cache.
3088
3089 Since 1.5.16
3090
3091  * CellServDB update - GCO Public CellServDB 09 Mar 2007
3092
3093  * AFS Server Manager and AFS Account Manager data cache
3094    moved from HKCU\Software\TransarcCorporation to 
3095    HKCU\Software\OpenAFS to prevent crashes due to data
3096    format changes.
3097
3098  * Reduce the default UP server probe time from 10 minutes
3099    to 5 minutes to match UNIX.  This will not solve the NAT
3100    port mapping timeout issue because most NATs default to
3101    a value less that 5 minutes and this value ensures that
3102    the afs client server will start probes 5 minutes after
3103    the last probe set ended.  The probe period for any one
3104    server is therefore longer than 5 minutes.  The more
3105    servers in the list the longer the time between probes.
3106
3107  * Before marking a server as down in cm_Analyze, retry the
3108    request using a new rx connection to the server.  If the
3109    cache manager is behind a NAT, it is possible that the 
3110    response from the server is being sent to the original   
3111    address:port from which the rx connection was established.
3112    This will appear to the cache manager as the server being
3113    down when in fact it is not.  Forcing the use of a new rx  
3114    connection will result in the server responding to the    
3115    most recent address:port assigned to the client by the NAT.
3116
3117    If the server is in fact down, it will simply take a little
3118    longer to notice it.   
3119
3120 Since 1.5.15
3121
3122  * Removing a directory that contained entries was failing with
3123    the wrong error code being returned to the CIFS client.
3124
3125  * rxdebug -long 
3126
3127  * rxdebug exponential back-off.  don't take down a server that
3128    is already struggling to respond.
3129
3130  * Network Identity Manager plug-in registers help on the Help
3131    menu if it is supported by NIM.  (KFW 3.2 and above)
3132
3133  * Plug-n-play networking did not always work after coming back
3134    from a Windows Suspend.  The AFS client service failed to 
3135    re-compute the LAN adapter to bind to and instead attempted
3136    to bind to all LAN adapters.  This would polute the public
3137    network with the name "AFS" which could lead to conflicts 
3138    between machines.
3139
3140  * Build installers using Microsoft Hotfixes provided at
3141    http://tinyurl.com/243svk for Visual Studio C RunTime Library
3142    Daylight Savings Time issues.  
3143
3144  * "fs checkserver" does not require admin privileges unless 
3145    the probe interval is being changed.
3146
3147 Since 1.5.14
3148
3149  * A reference leak was discovered in the mountpoint traversal 
3150    functionality which resulted in cm_volume_t objects not becoming
3151    eligible for re-use.  This will trigger a panic condition when
3152    more than the maximum number of volumes is accessed.
3153
3154  * Fixed the success test for the "fs memdump" operation.  Success
3155    is now reported as such.  Added cm_volume_t object information 
3156    to the dump file.
3157
3158  * A data corruption error has been fixed.  Write requests
3159    queued for background processing were not retried upon failure.
3160    This leads to inconsistencies between the contents of the file
3161    in the local cache and the contents of the file on the file 
3162    server.  
3163
3164    The implemented fix is to re-queue any request that has failed
3165    due to timeout, volume busy, volume offline, server busy, or
3166    server offline.  Requests are not processed while all servers
3167    for a volume are inaccessible.  When servers become accessible
3168    the background request will be retried.
3169
3170    In addition, if a background write fails, do not mark the buffers
3171    as clean.  Failure to preserve the dirty flag prevents the buffers
3172    from being written to the file server in the future.
3173
3174    This fix does not address the possibility that the credentials
3175    necessary to perform a write request might expire between the
3176    time the request is queued and when the request can be processed
3177    due to server accessibility.
3178
3179  * The Freelance volume does not support per user ACLs.  The
3180    cm_HaveAccessRights function did not handle this special case.
3181    Requests for privileges greater than read|lookup would result
3182    in afsd_service.exe entering an infinite loop.  ISOBuster is
3183    known to cause this behavior.
3184
3185  * When deleting files, the SMB Server would attempt to obtain
3186    the access permissions for the parent directory instead of 
3187    for the file itself.  This would result in an incorrect 
3188    assessment of whether or not the file can be deleted.
3189
3190  * The Network Identity Manager AFS plug-in has had its string
3191    tables updated for consistency with the language used by NIM.
3192    All credentials are referred to as credentials instead of tokens.
3193    Drop-down combo boxes now in fact drop down.
3194
3195  * The AFS Salvager was not properly being built on Windows.
3196    This is relevant only if the AFS servers are in use.
3197
3198  * The default signal handlers for the AFS servers incorrectly
3199    processed SIGQUIT.  Instead of stopping the server, an
3200    exception was raised.
3201
3202  * Fix another volume refcount leak.  This one was triggered by
3203    an inability to contact the vlservers in order to update the 
3204    file server list.
3205
3206  * Fix checklist control used by the drive mappings tabs in 
3207    afscreds.exe and afs_control.exe.
3208
3209  * Improve output of "fs memdump" related to buffer management.
3210
3211  * Fix refcount leak of cm_buf_t objects when prefetching buffers
3212    already in the process of being fetched.
3213
3214  * Improve cache performance by computing the buffer hash table
3215    size based upon the number of buffers so that the average 
3216    number of entries in a bucket is seven.
3217
3218  * Improve cache performance of read/write data by locally 
3219    updating the dataVersion of all buffers associated with the
3220    file on each StoreData or StoreStatus operation provided that
3221    the dataVersion was incremented by one and the dataVersion of
3222    the buffer matched the original dataVersion of the cached 
3223    status information for the file.
3224
3225  * When recycling cm_scache_t objects, make sure that we 
3226    clear all of the previous fields.  It is no longer the
3227    case that we can assume that the stat cache object is being
3228    obtained only after a successful FetchStatus call.  
3229    InlineBulkStatus will allocate stat cache objects for which
3230    the no status information is available.
3231
3232  * When a file is being opened with the OPEN_ALWAYS disposition,
3233    do not require write permissions when the file already exists
3234    unless of course the file is being opened requesting write 
3235    access.
3236
3237  * When a file has been opened for read-only access, if the 
3238    application requests an exclusive lock, obtain a read-lock
3239    instead of a write-lock.  The purpose of the exclusive lock
3240    in this situation is to prevent changes to the file and the
3241    full file read lock will provide this guarrantee.
3242
3243
3244 Since 1.5.13
3245
3246  * Enforce Unix Mode Write bit to prevent file deletion of read only
3247    files.
3248
3249  * The CIFS READ and LIST permissions use the same value 0x0001.
3250    When a directory is being accessed, check for PRSFS_LOOKUP 
3251    instead of PRSFS_READ.
3252
3253 Since 1.5.12
3254
3255  * Fix computations of short names of mount points.  They were
3256    broken as part of the directory search optimization. (1.5.13a)
3257
3258  * When all buffers are in use, periodically sleep the threads
3259    waiting for a buffer to become free while the global buffer
3260    lock is not being held in order to permit those threads that
3261    can free buffers to do so.
3262
3263  * Power Management improvements.  Maintain a global flag that 
3264    specifies whether or not the service is in a suspend state.
3265    Do not panic if Netbios() returns NRC_BRIDGE meaning that the
3266    lana is no longer valid.  Instead, stop the listener threads
3267    and if all listener threads are stopped, reset the lana_list.
3268    Allow the cm_Daemon() thread to periodically check the state
3269    of the smb listeners.  If they are all stopped and the service
3270    is not suspended, attempt to restart them.  If there are no valid
3271    lanas, return to the stopped state.
3272
3273  * CreateX and NTCreateX use cm_CheckNTOpen() to test whether or not
3274    the user is permitted to obtain read or write locks.  This function
3275    would obtain the lock and then drop it returning whether or not 
3276    the lock could be obtained.  If the lock was in fact required,
3277    CreateX/NTCreateX would then obtain it with cm_Lock().  The problem
3278    of course being that this pattern results in three RPCs to the 
3279    file server (lock, unlock, lock).  This is reduced to one RPC by
3280    implementing cm_CheckNTOpenDone() which frees the allocated byte
3281    range lock from cm_CheckNTOpen() after the cm_Lock() call is 
3282    performed.
3283
3284  * Optimize the SMB FindFirst processing for the case in which there
3285    are no wildcards.   If a cm_Lookup succeeds, generate a response
3286    from the stat cache entry we have a callback for.  Its cheaper 
3287    than walking each buffer of directory data associated with the
3288    directory stat cache entry when we have thousands of directory
3289    entries to search.
3290
3291  * Increase the SMB Ioctl MaxData size to support larger token sizes
3292
3293  * Disable autorun of the AFS Server Wizard when the AFS Server is 
3294    installed.
3295
3296  * Add AFS Server service dependencies on tcpip and PNP_TDI
3297
3298  * Remove the AFS Server Configuration Tool shortcut
3299
3300  * Add Freelance mode awareness to AFS Server Configuration Tool
3301
3302 Since 1.5.11
3303
3304  * Unlike previous versions of the OS, Vista performs a shutdown on
3305    the Microsoft Loopback adapter just like it would on a real adapter.
3306    This causes the smb_Listener threads to trigger a panic during a
3307    suspend/hibernate power event.
3308
3309    The fix is to unbind from the network adapters in response to a
3310    suspend/hibernate power event and then rebind to the adapters
3311    when a resume power event is received.  Note that the resume events
3312    are not reliably delivered so it is possible the afs service will
3313    not be accessible.  However, this is the best we can do.
3314
3315  * don't allow environment variables we set in afslogon.dll to be 
3316    inherited by child processes
3317
3318  * force an rx connection reset if VICECONNBAD or VICETOKENDEAD are
3319    received
3320
3321  * The old dirty buffer synchronization algorithm had a buf_IncrSyncer
3322    thread walking the all buffer list periodically searching for dirty
3323    buffers to write to the file server.  This had several negative
3324    results.  The algorithm ate up ever increasing amounts of CPU time
3325    even when AFS is idle as the size of the cache increases.  Also,
3326    buffers were written to the file server in an order based upon the
3327    original buffer allocation which has nothing to do with the order
3328    in which the buffers became dirty.
3329
3330    The new algorithm maintains a dirty buffer list.  Items are added
3331    when the buffer is originally marked dirty.  A buffer is only
3332    removed from the list by the buf_IncrSyncer when the buffer is no
3333    longer dirty.  If the list is empty the thread goes back to sleep
3334    immediately without additional processing requirements.
3335
3336 Since 1.5.10:
3337
3338  * Enable renaming of directories from the Explorer Shell when
3339    Offline Folders is enabled
3340
3341  * An error is reported in response to the SMB ReceiveCoreFlush 
3342    request when an error has not occurred.
3343
3344 Since 1.5.9:
3345
3346  * optimize dirty buffer flushes in response to suspend operations
3347    do not flush if only loopback adapter is installed
3348    do no retry dirty buffer writes
3349
3350  * do not reset netbios when performing loopback checks.  doing
3351    so will break the existing lana bind
3352
3353  * remove a deadlock in smb3.c QPathInfo 
3354
3355 Since 1.5.8:
3356
3357  * Add NetIDMgr AFS Plug-in
3358
3359  * "Show Tray Icon" checkbox removed from afs_config.exe
3360
3361  * Disable DNS Registrations for the Loopback Adapter and make sure
3362    that Netbios is turned on.
3363
3364  * A reference count leak on stat cache objects was fixed
3365
3366  * For debugging, tread ids of writers are now tracked on locks
3367
3368  * Corrected an incorrect lock that was being held but not
3369    freed in a rare error case
3370
3371  * Changed trace log end of line to CR-LF so it can be read
3372    with notepad.exe
3373
3374  * modify the buffer synchronization thread to write all dirty
3375    buffers and sleep only when there is no work to be done
3376
3377  * improve behavior of cache manager when large numbers of 
3378    temporary files are being created by multiple clients within
3379    the same directory.
3380
3381  * do not permit dirty buffers that belong to deleted files
3382    to be written to the file server.  its a waste of bandwidth
3383
3384  * do not leak stat cache references when the file server
3385    returns VNOVNODE
3386
3387  * afscreds: do not permit an attempt to obtain tokens if the
3388    afs service could not be started.   this was causing stack
3389    overflows on Vista after resuming from a suspend
3390
3391 Since 1.5.7:
3392
3393  * better handling of dot directory
3394
3395  * fs sq and fs mkm now behave as on UNIX
3396
3397  * a