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