windows-notes-20050523
[openafs.git] / doc / txt / winnotes / afs-changes-since-1.2.txt
index b40e670..77c2d56 100644 (file)
@@ -1,7 +1,289 @@
+Since 1.3.82:
+ * Enforce the delete on close flag specified by the NTCreateX()
+   operation.
+
+ * A race condition in the rx library was fixed that resulted in 
+   a deadlock in rx_NewCall when the RX_CONN_MAKECALL_WAITING flag
+   was cleared when threads were still waiting to use the 
+   connection.   Also, fixed a potential case in which the 
+   connection could be destroyed while threads were waiting to use it.
+
+ * The DNLC freelist has been seen to become corrupted with still 
+   active entries being stored on the freelist.  Changes were made
+   to perform a better job of cleaning entries before placing them
+   onto the freelist; marking them with the correct magic value when
+   purging the list; and allowing the list to be purged on startup
+   if the cache validation fails.
+
+ * Windows Crash Reporting does not get triggered for afsd_service.exe
+   because it provides its own top level exception handler.  This patch 
+   places an explicit call to ReportCrash() on platforms which support 
+   it.  (XP and above.)
+
+   If you configure Crash Reporting via AD Policy to capture crash
+   reports within the domain, then you will receive this output.
+
+ * Generate MiniDumps independent of the Windows Crash Reporting.
+   (a) If an exception occurs,a minidump will be generated at the path
+       %TEMP%\afsd.dmp. The type of minidump defaults to Normal but 
+       can be set to any other type via use of the
+       registry.      
+
+       [HKLM\SOFTWARE\OpenAFS\Client]  MiniDumpType (DWORD)
+
+   (b) MiniDumps can be generated at any time using the "fs minidump"
+       command.   This allows you to generate a minidump without 
+       stopping the process or even requiring the use of a debugger
+       on the system.
+
+  * an RX connection which reports bad ticket now treats it the same way
+    the expired ticket is treated.   The ticket is removed from the 
+    connection and a new anonymous connection is established.
+
+  * fs memdump now requires that the caller be in the AFS Client Admins
+    group
+
+  * additional debugging information is provided in cm_Analyze when the
+    error code is ignored.
+
+  * Fix a regression introduced into the pioctl() client code which
+    will cause a crash in winlogon.exe, explorer.exe and fs.exe if
+    MIT KFW is not installed. (1.3.82a)
+
+  * Remove AFS Gateway option from OpenAFS Control Panel (1.3.82a)
+
+Since 1.3.81:
+  * Fix a race condition in cm_EndCallbackGrantingCall() that 
+    could leave 'nrevp' pointing to freed memory.  In the process,
+    optimize the processing to ensure that the applications monitoring
+    the status of the stat cache entry are only notified at most 
+    once.
+
+  * Conditionalize access to the Explorer Shell AFS->Mount Point
+    ->Remove menu item.  Disable the item if the selected item(s)
+    are not mount points.
+
+  * Activate AFS RPC (RX) Free Packet Queues stored in Thread
+    Local Storage.  This eliminates thread contention on the
+    global RX free packet queue.  This should improve performance
+    on multi-CPU systems.
+
+  * Fix the IP address filtering code to properly load/unload
+    the IPHelper DLL so that Windows XP/2003 and beyond systems
+    do not have to manually probe the registry.
+
+  * CleanupACLEnt() was not being called consistently with 
+    the cm_scache_t object referred to by the back pointer
+    mutex locked. This could in very rare conditions lead to
+    an invalid memory access.
+
+  * Added a script command to the msi installer "afs_replace"
+    which can be used to replace one version of OpenAFS with
+    another without requiring an uninstall and reinstall if
+    the installed msi is no longer in its original location.
+
+  * Apparently the problem with multi-domain forests with cross-
+    realm trusts to non-Windows realms was not entirely solved.
+    The authentication to the AFS SMB service failed because 
+    the wrong name was being used.  Using ASU as an example,
+    the authentication was being performed with the name
+    "QAAD\user" (an account in the forest root) and not 
+    "user@ASU.EDU (the MIT Kerberos principal used to login with)
+
+    The solution was to add an additional dependency on KFW
+    in order or to be able to easily obtain the client principal 
+    name stored in the MSLSA ccache TGT.  This information is 
+    used in two locations:  
+
+    - the pioctl() function 
+
+    - a new WinLogon Event Handler for the "logon" event.  
+
+    The pioctl function will now be able to use the correct
+    name when calling WNetAddConnection2() and the "logon"
+    event handler will now be able to call WNetAddConnection2().
+    The hope is that the "logon" event handler will be called 
+    before the profile is loaded but I have not guarrantee
+    that will happen. 
+
+Since 1.3.80:
+  * Fixed a locking error in cm_TryBulkStat() which had the
+    potential of deadlocking the system for the length of time
+    it takes to perform a bulk status fetch operation.
+
+  * Replaced time conversion code (UnixTime <-> FILETIME) to 
+    be completely arithmetic instead of relying on a bizarre
+    algorithm involving a variety of C RTL time functions.
+    This has the side effect that UnixTime and FILETIME which
+    are both stored in UTC are interpretted as UTC throughout
+    the year.  Windows will apply the same localization to AFS
+    as it does to NTFS.  Applications which rely on the ability
+    to sync files between the two file systems will no longer
+    see the timestamps of files in AFS change an hour relative
+    to the files stored in NTFS or Windows based backup devices.
+
+  * Fixed a invalid memory access under a bizarre circumstance.
+    Windows will allow a physical mass media device to be 
+    installed via Plug N Play to the system and will assign it
+    the lowest available drive letter.  This is true even if the
+    drive letter is currently assigned in the user session to
+    a network device via NET USE (or its equivalent.)  When this
+    happens, queries sent to the CIFS server will contain invalid
+    data.  This invalid data was not being caught by the AFS 
+    Client Service and was resulting in a crash when Freelance
+    mode was in use.  
+
+  * Fixed a reference count error when registering callbacks
+    on a stat cache object if the callback was already registered
+
+  * Add a case to cm_Analyze() in order to handle the case where
+    cm_GetConnByMServers() returns CM_ERROR_NOSUCHVOLUME because
+    the server list for the volume is empty.  In this case, force
+    an update of the volume info and retry.
+
+  * Insert a missing cm_EndCallbackGrantingCall() which could
+    result in threads waiting for a callback to complete to never
+    be woken up.
+
+  * In the persistent cache, there is a maximum number of volume
+    entries.  Allow volume entries to be reused if the maximum
+    number have been allocated and their reference count is zero.
+
+  * If we already have a dead virtual connection object, don't 
+    ignore the fact that additional dead vc objects must be taken
+    care of.
+
+  * Removed a deadlock condition introduced in the summer of 2004.
+    Do not hold mx locks around calls to RX functions including
+    rx_NewCall().  That is what reference counts on the rx_connection
+    object are for.
+
+  * Fixed an initialization error in afslogon.dll which could
+    result in random behavior including a failure to terminate
+    the NPLogon function. (1.3.80b)
+
+  * Fixed an error preventing the use of SMB authentication
+    on Windows 2000.  (1.3.80a)
+
 Since 1.3.77:
-  * The list of ACL entries was becoming corrupted because the function
-    which obtained a free entry was doing so without the appropriate lock
-    being held.
+  * Updated CellServDB to Public CellServDB 16 Mar 2005
+
+  * Fixed DNS AFSDB queries to ensure that "csail" cannot be
+    misinterpretted as "csail.mit.edu" when the resolver 
+    is configured to append ".mit.edu" to failed DNS queries.
+
+  * Fixed another case in which the client would replace connections
+    to the host when it was not necessary.  In this case the 
+    situation would occur if cryptall was on and the connections
+    were unauthenticated due to lack of an appropriate token.
+
+  * OpenAFS for Windows has failed to work at sites which are 
+    utilizing a cross-realm trust between an MIT/Heimdal realm
+    and a multi-domain Windows forest when the workstation being
+    accessed is not located in the root domain.  This is caused 
+    by a bug in the workstation which was triggered after the 
+    introduction of Windows 2003 Server.  When the bug is triggered,
+    the workstation attempts to authenticate users to afsd_service.exe
+    by contacting the Domain Controller instead of using the 
+    LSA loopback authentication mechanism.
+
+    One of the reasons this bug occurs is because the workstation    
+    does not have a reliable way of knowing that the service whose
+    netbios name is "AFS" is located on the workstation.  This will
+    be fixed starting in Longhorn Beta 1 by Microsoft.  The 
+    "BackConnectionHostNames" registry value will be used to 
+    indicate that the authentications to that service name should
+    be performed using the loopback authentication mechanism.
+
+    In the meantime, when Logon Caching is enabled, we can force
+    afsd_service.exe to authenticate using the logon cache before
+    contacting the Domain Controller.  This will work with both
+    password and smart card based logons.  
+
+  * The allDown logic in cm_ConnByMServers() was wrong.  The allDown
+    flag should not be cleared if a volume's server reference is 
+    marked as "offline".  In the case where all of the volume's 
+    servers are either "down" or the volumes are "offline", we want
+    cm_Analyze() to process the condition as CM_ERROR_ALLOFFLINE
+    instead of as CM_ERROR_TIMEDOUT.  In fact, CM_ERROR_TIMEDOUT
+    should never occur in practice.
+
+    In the case of CM_ERROR_ALLOFFLINE, cm_Analyze() will sleep for
+    5 seconds, clear the server down and volume busy flags, and 
+    then force an update from the VLDB.  This allows the client to 
+    update the location of a volume if the reason for it being 
+    marked offline is because it is being moved.  Calls to 
+    cm_ConnByMServers() will be retried either until success or
+    the RDRtimeout period is reached.
+
+  * Correct the Power Management code behavior in response to 
+    Standby, Suspend, and Shutdown events.  Instead of flushing the
+    buffers associated with the mounted SMB submounts, simply write
+    all buffers which are marked dirty.
+
+  * Added support for "TheseCells" to afslogon.dll.  "TheseCells"
+    provides a list of cells other than the default cell for which
+    tokens should be obtained using the default Kerberos principal.
+    This functionality is logon domain specific and is only available
+    when using KFW for authentication.
+
+  * Fixed FindNext Invalid Handle error caused by over agressive 
+    attempts at garbage collecting dirSearch entries when the 
+    dirSearch ID wraps from the maximum value to 1.
+
+  * Add support for registry defined server preferences for VLDB and 
+    File servers.  See registry.txt for details.
+
+  * Increased default cache size to 96MB and default number of cache
+    entries to 10,000.
+
+  * Fixed refCount leaks related to directory lookups and pioctl calls.
+
+  * Callbacks revoked during a race condition with an attempt to 
+    obtain the same callback no longer result in an inaccessible
+    stat cache entry.
+
+  * New command line tool:
+
+        afsdacl : Set or reset the DACL to allow starting or stopping
+             the afsd service by any ordinary user.
+
+        Usage : afsdacl [-set | -reset] [-show]
+              -set   : Sets the DACL
+              -reset : Reset the DACL
+              -show  : Show current DACL (SDSF)
+
+  * IP addresses are no longer queried once at startup.  Instead IP
+    addresses are obtained as needed.   Loopback adapter addresses are
+    no longer published to the server.
+
+  * Pay attention to the MIT KFW registry configuration for automatic
+    importation of MSLSA credentials. (SOFTWARE\MIT\Leash32,MsLsaImport)
+
+  * Fix (once again) case-sensitive comparisons which was apparently 
+    broken in 1.3.72.
+
+  * Activate support for vos listvol -format
+
+  * Population of the "AFS Client Admins" group failed on non-English
+    versions of Windows because the name of the "Administrators" group
+    is localized.  Now we lookup the name of the group by using the
+    Administrators Group Alias Relative ID.
+
+  * Multiple cell token acquisition within afscreds.exe was broken in the 
+    case of Kerberos 5 cross realm authentication.  Instead of contacting
+    the KDC associated with the cell's realm, afscreds would obtain a 
+    token from the KDC of the user's realm.  This would result in
+    "invalid kvno errors" while authenticating to the AFS servers.  
+    Unauthenticated access would work.  The symptoms would vary based upon
+    whether or not the VLDB servers had been contacted using unauthenticated
+    connections prior to the user obtaining tokens.
+
+  * The list of ACL entries was becoming corrupted.  It appears as if 
+    an ACL when it expires was not being appropriately cleaned up.  In
+    fact, it was left in the list of ACLs associated with the scache 
+    entry.
 
   * Changed the default @sys name list to "x86_win32 i386_w2k i386_nt40"
     for 32-bit x86 systems.  The default for itanium will be "ia64_win64"
@@ -18,11 +300,47 @@ Since 1.3.77:
     STATUS_NOT_A_DIRECTORY instead of the expected 
     STATUS_OBJECT_PATH_NOT_FOUND.  This would cause the Windows SMB client
     to terminate the search for the DLL causing the execution of the 
-    application to fail.                                                                           
+    application to fail.
 
-  * Re-work the reference counting of smb_vc_t objects.  The references
+  * Rework the reference counting of smb_vc_t objects.  The references  
     stored in the waiting locks were not counted.  This could result in
-    an assertion if the reference count drops below 0.
+    an assertion if the reference count drops to zero.
+
+  * "fs wscell" returns "Freelance.Local.Root" for the workstation cell
+    when running in freelance mode.
+
+  * Added support for persistent caching of file contents, stat entries,
+    volume data, cell data, and name lookup data.  When the registry 
+    value, "NonPersistentCaching", is not defined or set to 0 the file 
+    specified by "CachePath" becomes a persistent cache file.   The 
+    size of the cache file is computed at run time.  It has a maximum
+    size of approximately 1.2GB.  The contents of the file will be 
+    validated according to the rules specified by the "ValidateCache"
+    registry value.  
+
+  * Added support for UUIDs.  UUIDs are kept for as long as the 
+    cache file is intact.
+
+  * Added cmdebug.exe and support cache manager debugging callback 
+    interfaces in afsd_service.exe.
+
+    Usage: cmdebug -servers <server machine> [-port <IP port>] [-long] 
+                   [-addrs] [-cache] [-help]
+    Where: -long   print all info
+           -addrs  print only host interfaces
+           -cache  print only cache configuration
+
+  * Symlinks to \\AFS\[all\]... will now be treated the same as 
+    symlinks to /afs/....   However, please use /afs/... as otherwise
+    the symlinks won't work on Unix.
+  
+  * Correct a problem with local CellID allocation for cells whose 
+    server list is obtained via DNS instead of a CellServDB file.  If
+    the DNS information expires the CellID assigned to the entry will
+    be changed.  This causes all of the cm_scache_t objects which refer
+    to the old cellID number to become useless.  Attempts to access 
+    files or directories with cm_scache_t objects using the old cellID
+    will fail since the server list cannot be obtained.
 
   * Correct deadlock condition in cm_EndCallbackGrantingCall which can
     be triggered if the volume referenced by the cm_scache_t object is