Windows: Fail recursive path evaluation with access denied
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 2 Apr 2012 17:41:27 +0000 (13:41 -0400)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 6 Apr 2012 13:58:03 +0000 (06:58 -0700)
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 <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>

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

index 79fe2a5..5179da0 100644 (file)
@@ -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)