From 4c5819e22852afe4e83bdcd05268864ac1953a8c Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Mon, 2 Apr 2012 13:41:27 -0400 Subject: [PATCH] Windows: Fail recursive path evaluation with access denied Matching the behavior of the AFS SMB server, the afs redirector should return STATUS_ACCESS_DENIED if File ID recursion is detected in the Name Array for any given path. Change-Id: Ie846b42a228c634f1c38a8103332c7bb72803d1f Reviewed-on: http://gerrit.openafs.org/7018 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index 79fe2a5ee..5179da0a2 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -5270,17 +5270,22 @@ AFSInsertNextElement( IN AFSNameArrayHdr *NameArray, try_return( ntStatus = STATUS_INSUFFICIENT_RESOURCES); } - if( NameArray->CurrentEntry != NULL && - NameArray->CurrentEntry->DirectoryCB == DirectoryCB) + for ( lCount = 0; lCount < NameArray->Count; lCount++) { - AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING, - AFS_TRACE_LEVEL_WARNING, - "AFSInsertNextElement [NA:%p] DE %p already current element\n", - NameArray, - DirectoryCB); + if ( AFSIsEqualFID( &NameArray->ElementArray[ lCount].FileId, + &DirectoryCB->ObjectInformation->FileId) ) + { - try_return( ntStatus); + AFSDbgLogMsg( AFS_SUBSYSTEM_NAME_ARRAY_PROCESSING, + AFS_TRACE_LEVEL_WARNING, + "AFSInsertNextElement [NA:%p] DE %p recursion Status %08X\n", + NameArray, + DirectoryCB, + STATUS_ACCESS_DENIED); + + try_return( ntStatus = STATUS_ACCESS_DENIED); + } } if( NameArray->Count > 0) -- 2.39.5