From af08b745117899d116d4ee14e08e1184369f591f Mon Sep 17 00:00:00 2001 From: Peter Scott Date: Thu, 29 Dec 2011 17:23:32 -0700 Subject: [PATCH] Windows: Support correct status codes from service When performing object verification, check for status failures corresponding to parent object issues which require a validation of the parent Change-Id: I4a73b55961eda62079c933f9e85888ea24b39f1f Reviewed-on: http://gerrit.openafs.org/6447 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp | 11 ++++++++--- src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp | 5 +---- .../afsrdr/kernel/lib/AFSNetworkProviderSupport.cpp | 9 +-------- src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h | 2 +- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp index b8ca97db5..55224aaac 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp @@ -1848,7 +1848,7 @@ AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo, // verification // - if( ntStatus == STATUS_INVALID_HANDLE) + if( ntStatus == STATUS_OBJECT_PATH_INVALID) { if( ObjectInfo->ParentObjectInformation != NULL) @@ -1910,7 +1910,7 @@ try_exit: NTSTATUS AFSEvaluateTargetByName( IN GUID *AuthGroup, - IN AFSFileID *ParentFileId, + IN AFSObjectInfoCB *ParentObjectInfo, IN PUNICODE_STRING SourceName, OUT AFSDirEnumEntry **DirEnumEntry) { @@ -1924,7 +1924,7 @@ AFSEvaluateTargetByName( IN GUID *AuthGroup, __Enter { - stTargetID.ParentId = *ParentFileId; + stTargetID.ParentId = ParentObjectInfo->FileId; // // Allocate our response buffer @@ -1959,6 +1959,11 @@ AFSEvaluateTargetByName( IN GUID *AuthGroup, if( ntStatus != STATUS_SUCCESS) { + if( ntStatus == STATUS_OBJECT_PATH_INVALID) + { + SetFlag( ParentObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY); + } + try_return( ntStatus); } diff --git a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp index dff36d2ce..62447ac84 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp @@ -3581,7 +3581,6 @@ AFSCheckCellName( IN GUID *AuthGroup, NTSTATUS ntStatus = STATUS_SUCCESS; UNICODE_STRING uniName; - AFSFileID stFileID; AFSDirEnumEntry *pDirEnumEntry = NULL; AFSDeviceExt *pDevExt = (AFSDeviceExt *)AFSRDRDeviceObject->DeviceExtension; AFSDirHdr *pDirHdr = &AFSGlobalRoot->ObjectInformation.Specific.Directory.DirectoryNodeHdr; @@ -3644,10 +3643,8 @@ AFSCheckCellName( IN GUID *AuthGroup, // OK, ask the CM about this component name // - stFileID = AFSGlobalRoot->ObjectInformation.FileId; - ntStatus = AFSEvaluateTargetByName( AuthGroup, - &stFileID, + &AFSGlobalRoot->ObjectInformation, CellName, &pDirEnumEntry); diff --git a/src/WINNT/afsrdr/kernel/lib/AFSNetworkProviderSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSNetworkProviderSupport.cpp index 26d3a6c92..7cec19656 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSNetworkProviderSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSNetworkProviderSupport.cpp @@ -1656,7 +1656,6 @@ AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB, if( pConnection == NULL) { UNICODE_STRING uniFullName; - AFSFileID stFileID; AFSDirEnumEntry *pDirEnumEntry = NULL; AFSDbgLogMsg( AFS_SUBSYSTEM_NETWORK_PROVIDER, @@ -1669,18 +1668,12 @@ AFSGetConnectionInfo( IN AFSNetworkProviderConnectionCB *ConnectCB, AFSReleaseResource( &pRDRDevExt->Specific.RDR.ProviderListLock); - // - // Perform a case insensitive search - // - // // OK, ask the CM about this component name // - stFileID = AFSGlobalRoot->ObjectInformation.FileId; - ntStatus = AFSEvaluateTargetByName( NULL, - &stFileID, + &AFSGlobalRoot->ObjectInformation, &uniShareName, &pDirEnumEntry); diff --git a/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h b/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h index 380c98367..adfd26544 100644 --- a/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h +++ b/src/WINNT/afsrdr/kernel/lib/Include/AFSCommon.h @@ -209,7 +209,7 @@ AFSEvaluateTargetByID( IN AFSObjectInfoCB *ObjectInfo, NTSTATUS AFSEvaluateTargetByName( IN GUID *AuthGroup, - IN AFSFileID *ParentFileId, + IN AFSObjectInfoCB *ParentObjectInfo, IN PUNICODE_STRING SourceName, OUT AFSDirEnumEntry **DirEnumEntry); -- 2.39.5