Windows: Move Authenticated field to CommResultCB
[openafs.git] / src / WINNT / afsrdr / user / RDRInit.cpp
index 18bc9ad..ad68376 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2008 Secure Endpoints, Inc.
- * Copyright (c) 2009-2011 Your File System, Inc.
+ * Copyright (c) 2009-2013 Your File System, Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+extern "C" {
+#include <afsconfig.h>
+#include <afs/param.h>
+#include <afs/stds.h>
+}
+
 #ifndef _WIN32_WINNT
 #define _WIN32_WINNT 0x0500
 #endif
 #include <windows.h>
 typedef LONG NTSTATUS, *PNTSTATUS;      // not declared in ntstatus.h
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <errno.h>
+#include <roken.h>
 
 #include <devioctl.h>
 
@@ -65,6 +68,8 @@ extern osi_log_t *afsd_logp;
 #include <WINNT/afsreg.h>
 #include <afs/cm_config.h>
 #include <afs/cm_error.h>
+#include <afs/cm_nls.h>
+#include <afs/cm_user.h>
 }
 #include <RDRPrototypes.h>
 
@@ -168,6 +173,7 @@ RDR_Initialize(void)
     if (dwRet == ERROR_SUCCESS) {
 
         RDR_InitIoctl();
+        RDR_InitPipe();
     }
 
     return dwRet;
@@ -279,6 +285,10 @@ RDR_ShutdownNotify(void)
         // log the error, nothing to do
     }
 
+
+    RDR_ShutdownIoctl();
+    RDR_ShutdownPipe();
+
     return 0;
 }
 
@@ -466,7 +476,7 @@ RDR_RequestWorkerThread( LPVOID lpParameter)
 
             requestBuffer->RequestFlags = pInfo->Flags;
 
-            if( !RDR_DeviceIoControl( hDevHandle,
+            if( RDR_DeviceIoControl( hDevHandle,
                                       IOCTL_AFS_PROCESS_IRP_REQUEST,
                                       (void *)requestBuffer,
                                       sizeof( AFSCommRequest),
@@ -475,21 +485,27 @@ RDR_RequestWorkerThread( LPVOID lpParameter)
                                       &bytesReturned ))
             {
 
+                WaitForSingleObject( RDR_SuspendEvent, INFINITE);
+
                 //
-                // Error condition back from driver
+                // Go process the request
                 //
 
-                break;
+                if (!Exit)
+                    RDR_ProcessRequest( requestBuffer);
             }
+            else
+            {
 
-            WaitForSingleObject( RDR_SuspendEvent, INFINITE);
-
-            //
-            // Go process the request
-            //
+                if (afsd_logp->enabled) {
+                    WCHAR wchBuffer[256];
+                    DWORD gle = GetLastError();
 
-            if (!Exit)
-                RDR_ProcessRequest( requestBuffer);
+                    swprintf( wchBuffer,
+                              L"Failed to post IOCTL_AFS_IRP_REQUEST gle 0x%x", gle);
+                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
+                }
+            }
         }
 
        free( requestBuffer);
@@ -703,11 +719,12 @@ RDR_ProcessRequest( AFSCommRequest *RequestBuffer)
             AFSFileRenameCB *pFileRenameCB = (AFSFileRenameCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
             if (afsd_logp->enabled) {
-                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_RENAME_FILE Index %08lX File %08lX.%08lX.%08lX.%08lX NameLength %08lX Name %*S",
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_RENAME_FILE Index %08lX File %08lX.%08lX.%08lX.%08lX NameLength %08lX Name %*S TargetLength %08lX Target %*S",
                           RequestBuffer->RequestIndex,
                           RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
                           RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique,
-                          RequestBuffer->NameLength, (int)RequestBuffer->NameLength, RequestBuffer->Name);
+                          RequestBuffer->NameLength, (int)RequestBuffer->NameLength, RequestBuffer->Name,
+                          pFileRenameCB->TargetNameLength, (int)pFileRenameCB->TargetNameLength, pFileRenameCB->TargetName);
 
                 osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
@@ -724,6 +741,34 @@ RDR_ProcessRequest( AFSCommRequest *RequestBuffer)
             break;
         }
 
+        case AFS_REQUEST_TYPE_HARDLINK_FILE:
+        {
+
+            AFSFileHardLinkCB *pFileHardLinkCB = (AFSFileHardLinkCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_HARDLINK_FILE Index %08lX File %08lX.%08lX.%08lX.%08lX NameLength %08lX Name %*S TargetLength %08lX Target %*S",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique,
+                          RequestBuffer->NameLength, (int)RequestBuffer->NameLength, RequestBuffer->Name,
+                          pFileHardLinkCB->TargetNameLength, (int)pFileHardLinkCB->TargetNameLength, pFileHardLinkCB->TargetName);
+
+                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
+                }
+
+                RDR_HardLinkFileEntry( userp,
+                                       RequestBuffer->Name,
+                                       RequestBuffer->NameLength,
+                                       RequestBuffer->FileId,
+                                       pFileHardLinkCB,
+                                       bWow64,
+                                       RequestBuffer->ResultBufferLength,
+                                       &pResultCB);
+
+            break;
+        }
+
         case AFS_REQUEST_TYPE_REQUEST_FILE_EXTENTS:
         {
 
@@ -882,369 +927,388 @@ RDR_ProcessRequest( AFSCommRequest *RequestBuffer)
             break;
         }
 
-    case AFS_REQUEST_TYPE_PIOCTL_READ:
-            {
-                AFSPIOCtlIORequestCB *pPioctlCB = (AFSPIOCtlIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+        case AFS_REQUEST_TYPE_PIOCTL_READ:
+        {
+            AFSPIOCtlIORequestCB *pPioctlCB = (AFSPIOCtlIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIOCTL_READ Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIOCTL_READ Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
+            }
 
-                RDR_PioctlRead( userp,
-                                RequestBuffer->FileId,
-                                pPioctlCB,
-                                bWow64,
-                                bIsLocalSystem,
-                                RequestBuffer->ResultBufferLength,
-                                &pResultCB);
-                break;
+            RDR_PioctlRead( userp,
+                            RequestBuffer->FileId,
+                            pPioctlCB,
+                            bWow64,
+                            bIsLocalSystem,
+                            RequestBuffer->ResultBufferLength,
+                            &pResultCB);
+            break;
+        }
+
+        case AFS_REQUEST_TYPE_PIOCTL_CLOSE:
+        {
+            AFSPIOCtlOpenCloseRequestCB *pPioctlCB = (AFSPIOCtlOpenCloseRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIOCTL_CLOSE Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_PIOCTL_CLOSE:
-            {
-                AFSPIOCtlOpenCloseRequestCB *pPioctlCB = (AFSPIOCtlOpenCloseRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            RDR_PioctlClose( userp,
+                             RequestBuffer->FileId,
+                             pPioctlCB,
+                             bWow64,
+                             RequestBuffer->ResultBufferLength,
+                             &pResultCB);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIOCTL_CLOSE Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+        case AFS_REQUEST_TYPE_BYTE_RANGE_LOCK:
+        {
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_BYTE_RANGE_LOCK Index %08lX File %08lX.%08lX.%08lX.%08lX %S",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique,
+                          BooleanFlagOn( RequestBuffer->RequestFlags, AFS_REQUEST_FLAG_SYNCHRONOUS) ? L"Sync" : L"Async");
 
-                RDR_PioctlClose( userp,
-                                RequestBuffer->FileId,
-                                pPioctlCB,
-                                bWow64,
-                                RequestBuffer->ResultBufferLength,
-                                &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
+            AFSByteRangeLockRequestCB *pBRLRequestCB = (AFSByteRangeLockRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-    case AFS_REQUEST_TYPE_BYTE_RANGE_LOCK:
-            {
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_BYTE_RANGE_LOCK Index %08lX File %08lX.%08lX.%08lX.%08lX %S",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique,
-                              BooleanFlagOn( RequestBuffer->RequestFlags, AFS_REQUEST_FLAG_SYNCHRONOUS) ? L"Sync" : L"Async");
+            RDR_ByteRangeLockSync( userp,
+                                   RequestBuffer->FileId,
+                                   pBRLRequestCB,
+                                   bWow64,
+                                   RequestBuffer->ResultBufferLength,
+                                   &pResultCB);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            break;
+        }
 
-                AFSByteRangeLockRequestCB *pBRLRequestCB = (AFSByteRangeLockRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+        case AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK:
+        {
+            AFSByteRangeUnlockRequestCB *pBRURequestCB = (AFSByteRangeUnlockRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                RDR_ByteRangeLockSync( userp,
-                                       RequestBuffer->FileId,
-                                       pBRLRequestCB,
-                                       bWow64,
-                                       RequestBuffer->ResultBufferLength,
-                                       &pResultCB);
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK Index %08lX File %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK:
-            {
-                AFSByteRangeUnlockRequestCB *pBRURequestCB = (AFSByteRangeUnlockRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            RDR_ByteRangeUnlock( userp,
+                                 RequestBuffer->FileId,
+                                 pBRURequestCB,
+                                 bWow64,
+                                 RequestBuffer->ResultBufferLength,
+                                 &pResultCB);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK Index %08lX File %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+        case AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK_ALL:
+        {
+            AFSByteRangeUnlockRequestCB *pBRURequestCB = (AFSByteRangeUnlockRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK_ALL Index %08lX File %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                RDR_ByteRangeUnlock( userp,
-                                     RequestBuffer->FileId,
-                                     pBRURequestCB,
-                                     bWow64,
-                                     RequestBuffer->ResultBufferLength,
-                                     &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK_ALL:
-            {
-                AFSByteRangeUnlockRequestCB *pBRURequestCB = (AFSByteRangeUnlockRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
-
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_BYTE_RANGE_UNLOCK_ALL Index %08lX File %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+            RDR_ByteRangeUnlockAll( userp,
+                                    RequestBuffer->FileId,
+                                    pBRURequestCB,
+                                    bWow64,
+                                    RequestBuffer->ResultBufferLength,
+                                    &pResultCB);
+            break;
+        }
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+        case AFS_REQUEST_TYPE_GET_VOLUME_INFO:
+        {
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_GET_VOLUME_INFO Index %08lX File %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                RDR_ByteRangeUnlockAll( userp,
-                                        RequestBuffer->FileId,
-                                        pBRURequestCB,
-                                        bWow64,
-                                        RequestBuffer->ResultBufferLength,
-                                        &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_GET_VOLUME_INFO:
-            {
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_GET_VOLUME_INFO Index %08lX File %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+            RDR_GetVolumeInfo( userp,
+                               RequestBuffer->FileId,
+                               bWow64,
+                               RequestBuffer->ResultBufferLength,
+                               &pResultCB);
+            break;
+        }
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+        case AFS_REQUEST_TYPE_GET_VOLUME_SIZE_INFO:
+        {
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_GET_VOLUME_SIZE_INFO Index %08lX File %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
+            }
 
-                RDR_GetVolumeInfo( userp,
+            RDR_GetVolumeSizeInfo( userp,
                                    RequestBuffer->FileId,
                                    bWow64,
                                    RequestBuffer->ResultBufferLength,
                                    &pResultCB);
-                break;
+            break;
+        }
+
+        case AFS_REQUEST_TYPE_HOLD_FID:
+        {
+
+            AFSHoldFidRequestCB *pHoldFidCB = (AFSHoldFidRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_HOLD_FID Index %08lX",
+                          RequestBuffer->RequestIndex);
+
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_HOLD_FID:
-            {
+            RDR_HoldFid( userp,
+                         pHoldFidCB,
+                         bFast,
+                         RequestBuffer->ResultBufferLength,
+                         &pResultCB);
 
-                AFSHoldFidRequestCB *pHoldFidCB = (AFSHoldFidRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_HOLD_FID Index %08lX",
-                              RequestBuffer->RequestIndex);
+        case AFS_REQUEST_TYPE_RELEASE_FID:
+        {
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            AFSReleaseFidRequestCB *pReleaseFidCB = (AFSReleaseFidRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                RDR_HoldFid( userp,
-                             pHoldFidCB,
-                             bFast,
-                             RequestBuffer->ResultBufferLength,
-                             &pResultCB);
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_RELEASE_FID Index %08lX",
+                          RequestBuffer->RequestIndex);
 
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_RELEASE_FID:
-            {
+            RDR_ReleaseFid( userp,
+                            pReleaseFidCB,
+                            bFast,
+                            RequestBuffer->ResultBufferLength,
+                            &pResultCB);
 
-                AFSReleaseFidRequestCB *pReleaseFidCB = (AFSReleaseFidRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_RELEASE_FID Index %08lX",
-                              RequestBuffer->RequestIndex);
+        case AFS_REQUEST_TYPE_CLEANUP_PROCESSING:
+        {
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            AFSFileCleanupCB *pCleanupCB = (AFSFileCleanupCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                RDR_ReleaseFid( userp,
-                                pReleaseFidCB,
-                                bFast,
-                                RequestBuffer->ResultBufferLength,
-                                &pResultCB);
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_CLEANUP_FILE Index %08lX File %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_CLEANUP_PROCESSING:
-            {
+            RDR_CleanupFileEntry( userp,
+                                  RequestBuffer->FileId,
+                                  RequestBuffer->Name,
+                                  RequestBuffer->NameLength,
+                                  pCleanupCB,
+                                  bWow64,
+                                  bFlushFile,
+                                  bDeleteFile,
+                                  bUnlockFile,
+                                  RequestBuffer->ResultBufferLength,
+                                  &pResultCB);
 
-                AFSFileCleanupCB *pCleanupCB = (AFSFileCleanupCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_CLEANUP_FILE Index %08lX File %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+        case AFS_REQUEST_TYPE_PIPE_OPEN:
+        {
+            AFSPipeOpenCloseRequestCB *pPipeCB = (AFSPipeOpenCloseRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_OPEN Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                RDR_CleanupFileEntry( userp,
-                                      RequestBuffer->FileId,
-                                      RequestBuffer->Name,
-                                      RequestBuffer->NameLength,
-                                      pCleanupCB,
-                                      bWow64,
-                                      bFlushFile,
-                                      bDeleteFile,
-                                      bUnlockFile,
-                                      RequestBuffer->ResultBufferLength,
-                                      &pResultCB);
-
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_PIPE_OPEN:
-            {
-                AFSPipeOpenCloseRequestCB *pPipeCB = (AFSPipeOpenCloseRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            RDR_PipeOpen( userp,
+                          RequestBuffer->FileId,
+                          RequestBuffer->Name,
+                          RequestBuffer->NameLength,
+                          pPipeCB,
+                          bWow64,
+                          RequestBuffer->ResultBufferLength,
+                          &pResultCB);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_OPEN Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+        case AFS_REQUEST_TYPE_PIPE_WRITE:
+        {
+            AFSPipeIORequestCB *pPipeCB = (AFSPipeIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            BYTE *pPipeData = ((BYTE *)RequestBuffer->Name + RequestBuffer->DataOffset + sizeof(AFSPipeIORequestCB));
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_WRITE Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                RDR_PipeOpen( userp,
-                              RequestBuffer->FileId,
-                              RequestBuffer->Name,
-                              RequestBuffer->NameLength,
-                              pPipeCB,
-                              bWow64,
-                              RequestBuffer->ResultBufferLength,
-                              &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_PIPE_WRITE:
-            {
-                AFSPipeIORequestCB *pPipeCB = (AFSPipeIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
-                BYTE *pPipeData = ((BYTE *)RequestBuffer->Name + RequestBuffer->DataOffset + sizeof(AFSPipeIORequestCB));
+            RDR_PipeWrite( userp,
+                           RequestBuffer->FileId,
+                           pPipeCB,
+                           pPipeData,
+                           bWow64,
+                           RequestBuffer->ResultBufferLength,
+                           &pResultCB);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_WRITE Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+        case AFS_REQUEST_TYPE_PIPE_READ:
+        {
+            AFSPipeIORequestCB *pPipeCB = (AFSPipeIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_READ Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                RDR_PipeWrite( userp,
-                               RequestBuffer->FileId,
-                               pPipeCB,
-                               pPipeData,
-                               bWow64,
-                               RequestBuffer->ResultBufferLength,
-                               &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_PIPE_READ:
-            {
-                AFSPipeIORequestCB *pPipeCB = (AFSPipeIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            RDR_PipeRead( userp,
+                          RequestBuffer->FileId,
+                          pPipeCB,
+                          bWow64,
+                          RequestBuffer->ResultBufferLength,
+                          &pResultCB);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_READ Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
+        case AFS_REQUEST_TYPE_PIPE_CLOSE:
+        {
+            AFSPipeOpenCloseRequestCB *pPipeCB = (AFSPipeOpenCloseRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_CLOSE Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
+                          RequestBuffer->RequestIndex,
+                          RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
+                          RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                RDR_PipeRead( userp,
-                              RequestBuffer->FileId,
-                              pPipeCB,
-                              bWow64,
-                              RequestBuffer->ResultBufferLength,
-                              &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_PIPE_CLOSE:
-            {
-                AFSPipeOpenCloseRequestCB *pPipeCB = (AFSPipeOpenCloseRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            RDR_PipeClose( userp,
+                           RequestBuffer->FileId,
+                           pPipeCB,
+                           bWow64,
+                           RequestBuffer->ResultBufferLength,
+                           &pResultCB);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_CLOSE Index %08lX Parent %08lX.%08lX.%08lX.%08lX",
-                              RequestBuffer->RequestIndex,
-                              RequestBuffer->FileId.Cell, RequestBuffer->FileId.Volume,
-                              RequestBuffer->FileId.Vnode, RequestBuffer->FileId.Unique);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+        case AFS_REQUEST_TYPE_PIPE_TRANSCEIVE:
+        {
+            AFSPipeIORequestCB *pPipeCB = (AFSPipeIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            BYTE *pPipeData = ((BYTE *)RequestBuffer->Name + RequestBuffer->DataOffset + sizeof(AFSPipeIORequestCB));
+
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_TRANSCEIVE Index %08lX",
+                          RequestBuffer->RequestIndex);
+
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
+            }
 
-                RDR_PipeClose( userp,
+            RDR_PipeTransceive( userp,
                                 RequestBuffer->FileId,
                                 pPipeCB,
+                                pPipeData,
                                 bWow64,
                                 RequestBuffer->ResultBufferLength,
                                 &pResultCB);
-                break;
-            }
-
-
-    case AFS_REQUEST_TYPE_PIPE_TRANSCEIVE:
-            {
-                AFSPipeIORequestCB *pPipeCB = (AFSPipeIORequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
-                BYTE *pPipeData = ((BYTE *)RequestBuffer->Name + RequestBuffer->DataOffset + sizeof(AFSPipeIORequestCB));
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_TRANSCEIVE Index %08lX",
-                              RequestBuffer->RequestIndex);
+        case AFS_REQUEST_TYPE_PIPE_QUERY_INFO:
+        {
+            AFSPipeInfoRequestCB *pPipeInfoCB = (AFSPipeInfoRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_QUERY_INFO Index %08lX",
+                          RequestBuffer->RequestIndex);
 
-                RDR_PipeTransceive( userp,
-                                    RequestBuffer->FileId,
-                                    pPipeCB,
-                                    pPipeData,
-                                    bWow64,
-                                    RequestBuffer->ResultBufferLength,
-                                    &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_PIPE_QUERY_INFO:
-            {
-                AFSPipeInfoRequestCB *pPipeInfoCB = (AFSPipeInfoRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            RDR_PipeQueryInfo( userp,
+                               RequestBuffer->FileId,
+                               pPipeInfoCB,
+                               bWow64,
+                               RequestBuffer->ResultBufferLength,
+                               &pResultCB);
+            break;
+        }
 
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_QUERY_INFO Index %08lX",
-                              RequestBuffer->RequestIndex);
+        case AFS_REQUEST_TYPE_PIPE_SET_INFO:
+        {
+            AFSPipeInfoRequestCB *pPipeInfoCB = (AFSPipeInfoRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
+            BYTE *pPipeData = ((BYTE *)RequestBuffer->Name + RequestBuffer->DataOffset + sizeof(AFSPipeInfoRequestCB));
 
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
+            if (afsd_logp->enabled) {
+                swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_SET_INFO Index %08lX",
+                          RequestBuffer->RequestIndex);
 
-                RDR_PipeQueryInfo( userp,
-                                   RequestBuffer->FileId,
-                                   pPipeInfoCB,
-                                   bWow64,
-                                   RequestBuffer->ResultBufferLength,
-                                   &pResultCB);
-                break;
+                osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
             }
 
-    case AFS_REQUEST_TYPE_PIPE_SET_INFO:
-            {
-                AFSPipeInfoRequestCB *pPipeInfoCB = (AFSPipeInfoRequestCB *)((char *)RequestBuffer->Name + RequestBuffer->DataOffset);
-                BYTE *pPipeData = ((BYTE *)RequestBuffer->Name + RequestBuffer->DataOffset + sizeof(AFSPipeInfoRequestCB));
-
-                if (afsd_logp->enabled) {
-                    swprintf( wchBuffer, L"ProcessRequest Processing AFS_REQUEST_TYPE_PIPE_SET_INFO Index %08lX",
-                              RequestBuffer->RequestIndex);
-
-                    osi_Log1(afsd_logp, "%S", osi_LogSaveStringW(afsd_logp, wchBuffer));
-                }
-
-                RDR_PipeSetInfo( userp,
-                                 RequestBuffer->FileId,
-                                 pPipeInfoCB,
-                                 pPipeData,
-                                 bWow64,
-                                 RequestBuffer->ResultBufferLength,
-                                 &pResultCB);
+            RDR_PipeSetInfo( userp,
+                             RequestBuffer->FileId,
+                             pPipeInfoCB,
+                             pPipeData,
+                             bWow64,
+                             RequestBuffer->ResultBufferLength,
+                             &pResultCB);
 
-                break;
-            }
+            break;
+        }
 
-    default:
+        default:
             bUnsupported = TRUE;
 
             if (afsd_logp->enabled) {
@@ -1258,6 +1322,11 @@ RDR_ProcessRequest( AFSCommRequest *RequestBuffer)
             break;
     }
 
+    if (userp) {
+        pResultCB->Authenticated = cm_HaveToken( userp,
+                                                 RequestBuffer->FileId.Cell);
+    }
+
     if( BooleanFlagOn( RequestBuffer->RequestFlags, AFS_REQUEST_FLAG_SYNCHRONOUS))
     {
        if (pResultCB == NULL) {