Windows: Redirector Dir Enumeration Bug

An enumerated directory was not validated properly if
AFSValidateEntry() was called with PurgeData == FALSE even
when a data version change was detected.  Now it does.

FIXES 130636

Change-Id: Ic5d2fd62b40fb16652fc09d459caf43905566d37
Reviewed-on: http://gerrit.openafs.org/7012
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>
This commit is contained in:
Jeffrey Altman 2012-04-01 23:09:32 -04:00 committed by Jeffrey Altman
parent 2982f8c5b1
commit e53e189c3e

View File

@ -3704,12 +3704,14 @@ AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING, AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE_2, AFS_TRACE_LEVEL_VERBOSE_2,
"AFSValidateEntry Validating entry %wZ FID %08lX-%08lX-%08lX-%08lX\n", "AFSValidateEntry Validating entry %wZ FID %08lX-%08lX-%08lX-%08lX PurgeContent %u FastCall %u\n",
&DirEntry->NameInformation.FileName, &DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell, pObjectInfo->FileId.Cell,
pObjectInfo->FileId.Volume, pObjectInfo->FileId.Volume,
pObjectInfo->FileId.Vnode, pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique); pObjectInfo->FileId.Unique,
PurgeContent,
FastCall);
// //
// If this is a fake node then bail since the service knows nothing about it // If this is a fake node then bail since the service knows nothing about it
@ -3802,7 +3804,8 @@ AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING, AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE, AFS_TRACE_LEVEL_VERBOSE,
"AFSValidateEntry Validating entry FastCall %d %wZ FID %08lX-%08lX-%08lX-%08lX DV %I64X returned DV %I64X FT %d\n", "AFSValidateEntry Validating entry Purge %d FastCall %d %wZ FID %08lX-%08lX-%08lX-%08lX DV %I64X returned DV %I64X FT %d\n",
PurgeContent,
FastCall, FastCall,
&DirEntry->NameInformation.FileName, &DirEntry->NameInformation.FileName,
pObjectInfo->FileId.Cell, pObjectInfo->FileId.Cell,
@ -4026,8 +4029,7 @@ AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
AFSDirectoryCB *pCurrentDirEntry = NULL; AFSDirectoryCB *pCurrentDirEntry = NULL;
if( pCurrentFcb != NULL && if( pObjectInfo->DataVersion.QuadPart != pDirEnumEntry->DataVersion.QuadPart)
pObjectInfo->DataVersion.QuadPart != pDirEnumEntry->DataVersion.QuadPart)
{ {
// //
@ -4056,8 +4058,8 @@ AFSValidateEntry( IN AFSDirectoryCB *DirEntry,
AFSAcquireExcl( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock, AFSAcquireExcl( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock,
TRUE); TRUE);
AFSValidateDirectoryCache( pCurrentFcb->ObjectInformation, ntStatus = AFSValidateDirectoryCache( pObjectInfo,
AuthGroup); AuthGroup);
AFSReleaseResource( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock); AFSReleaseResource( pObjectInfo->Specific.Directory.DirectoryNodeHdr.TreeLock);
} }