From c7e2d8450117a947cb858bfdb4aedd668bd56bfd Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Wed, 2 Nov 2011 10:35:14 -0400 Subject: [PATCH] Windows: Mount points are always directories Set the directory file attribute for all mount points since a mount point target is always represented as a directory. Change-Id: I57a8e44d1382093311e8263c18d55f22f2f745ea Reviewed-on: http://gerrit.openafs.org/5784 Tested-by: BuildBot Reviewed-by: Peter Scott Tested-by: Peter Scott Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp | 59 ++++++++++++++++------ 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp index 56b2defc8..6d6b126e5 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp @@ -1115,12 +1115,17 @@ AFSInitDirEntry( IN AFSObjectInfoCB *ParentObjectInfo, pObjectInfoCB->FileAttributes = DirEnumEntry->FileAttributes; - if( pObjectInfoCB->FileType == AFS_FILE_TYPE_MOUNTPOINT || - pObjectInfoCB->FileType == AFS_FILE_TYPE_SYMLINK || + if( pObjectInfoCB->FileType == AFS_FILE_TYPE_MOUNTPOINT) + { + + pObjectInfoCB->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT); + } + + if (pObjectInfoCB->FileType == AFS_FILE_TYPE_SYMLINK || pObjectInfoCB->FileType == AFS_FILE_TYPE_DFSLINK) { - pObjectInfoCB->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; + pObjectInfoCB->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT; } pObjectInfoCB->EaSize = DirEnumEntry->EaSize; @@ -1331,12 +1336,17 @@ AFSEvaluateNode( IN GUID *AuthGroup, DirEntry->ObjectInformation->FileAttributes = pDirEntry->FileAttributes; - if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT || - pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK || + if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT) + { + + DirEntry->ObjectInformation->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT); + } + + if( pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK || pDirEntry->FileType == AFS_FILE_TYPE_DFSLINK) { - DirEntry->ObjectInformation->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; + DirEntry->ObjectInformation->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT; } DirEntry->ObjectInformation->EaSize = pDirEntry->EaSize; @@ -1511,12 +1521,17 @@ AFSValidateSymLink( IN GUID *AuthGroup, DirEntry->ObjectInformation->FileAttributes = pDirEntry->FileAttributes; - if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT || - pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK || + if( pDirEntry->FileType == AFS_FILE_TYPE_MOUNTPOINT) + { + + DirEntry->ObjectInformation->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT); + } + + if( pDirEntry->FileType == AFS_FILE_TYPE_SYMLINK || pDirEntry->FileType == AFS_FILE_TYPE_DFSLINK) { - DirEntry->ObjectInformation->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; + DirEntry->ObjectInformation->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT; } DirEntry->ObjectInformation->EaSize = pDirEntry->EaSize; @@ -3509,12 +3524,17 @@ AFSUpdateMetaData( IN AFSDirectoryCB *DirEntry, pObjectInfo->FileAttributes = DirEnumEntry->FileAttributes; - if( pObjectInfo->FileType == AFS_FILE_TYPE_MOUNTPOINT || - pObjectInfo->FileType == AFS_FILE_TYPE_SYMLINK || + if( pObjectInfo->FileType == AFS_FILE_TYPE_MOUNTPOINT) + { + + pObjectInfo->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT); + } + + if( pObjectInfo->FileType == AFS_FILE_TYPE_SYMLINK || pObjectInfo->FileType == AFS_FILE_TYPE_DFSLINK) { - pObjectInfo->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; + pObjectInfo->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT; } pObjectInfo->EaSize = DirEnumEntry->EaSize; @@ -5925,13 +5945,22 @@ AFSRetrieveFileAttributes( IN AFSDirectoryCB *ParentDirectoryCB, if( pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_MOUNTPOINT) { - FileInfo->FileAttributes |= (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT); + FileInfo->FileAttributes = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_REPARSE_POINT); } else if( pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_SYMLINK || pDirectoryEntry->ObjectInformation->FileType == AFS_FILE_TYPE_DFSLINK) { - FileInfo->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; + if ( FileInfo->FileAttributes == FILE_ATTRIBUTE_NORMAL) + { + + FileInfo->FileAttributes = FILE_ATTRIBUTE_REPARSE_POINT; + } + else + { + + FileInfo->FileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; + } } FileInfo->AllocationSize = pDirectoryEntry->ObjectInformation->AllocationSize; @@ -8274,4 +8303,4 @@ AFSRetrieveParentPath( IN UNICODE_STRING *FullFileName, ParentPath->Length -= sizeof( WCHAR); return; -} \ No newline at end of file +} -- 2.39.5