Windows: Look for 8.3 name when doing a rename
authorRod Widdowson <rdw@steadingsoftware.com>
Sat, 22 Oct 2011 15:46:26 +0000 (16:46 +0100)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Tue, 25 Oct 2011 17:51:49 +0000 (10:51 -0700)
If we are doing a destructive rename we need to find whether the
target file exists.  This is done in the usual way (case sensitive
case insensitive), but the short name is not looked for.

This means that the rename of a file to a short name will not
supersede correctly; rather the service refuses the rename since
the target existed already.

This patch looks the target name up in the shortname tree if the
target name is short and all else has failed.

Change-Id: Ie054516a378edf52938d3465143a16107a99c0f6
Reviewed-on: http://gerrit.openafs.org/5652
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>

src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp

index 2c73daf..fe93a6f 100644 (file)
@@ -1907,6 +1907,17 @@ AFSSetRenameInfo( IN PIRP Irp)
                                               &pTargetDirEntry);
         }
 
+        if( pTargetDirEntry == NULL && RtlIsNameLegalDOS8Dot3( &uniTargetName,
+                                                               NULL,
+                                                               NULL))
+        {
+            //
+            // Try the short name
+            //
+            AFSLocateShortNameDirEntry( pTargetParentObject->Specific.Directory.ShortNameTree,
+                                        ulTargetCRC,
+                                        &pTargetDirEntry);
+        }
         //
         // Increment our ref count on the dir entry
         //