From 338014a231235fe25116b09c1e8978db2db1dbb3 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Mon, 1 Oct 2012 12:03:49 -0400 Subject: [PATCH] Windows: File Info Query Symlinks For Symlinks, always set the Reparse Point attribute and set the Directory attribute if the target is a directory. Do not return the file attributes of the target. Change-Id: I72dcde912c998e1ab3eea45426d019314e10e740 Reviewed-on: http://gerrit.openafs.org/8171 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp | 72 ++++++++++++++++++++++++++--- 1 file changed, 65 insertions(+), 7 deletions(-) diff --git a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp index fe9654d..3353256 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp @@ -829,9 +829,23 @@ AFSQueryBasicInfo( IN PIRP Irp, &pCcb->AuthGroup, &stFileInfo))) { - ulFileAttribs = stFileInfo.FileAttributes; - ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT; + if ( ulFileAttribs == FILE_ATTRIBUTE_NORMAL) + { + + ulFileAttribs = FILE_ATTRIBUTE_REPARSE_POINT; + } + else + { + + ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT; + } + + if ( stFileInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + + ulFileAttribs |= FILE_ATTRIBUTE_DIRECTORY; + } } AFSAcquireShared( &pFcb->NPFcb->Resource, @@ -936,7 +950,23 @@ AFSQueryStandardInfo( IN PIRP Irp, &pCcb->AuthGroup, &stFileInfo))) { - ulFileAttribs = stFileInfo.FileAttributes; + + if ( ulFileAttribs == FILE_ATTRIBUTE_NORMAL) + { + + ulFileAttribs = FILE_ATTRIBUTE_REPARSE_POINT; + } + else + { + + ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT; + } + + if ( stFileInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + + ulFileAttribs |= FILE_ATTRIBUTE_DIRECTORY; + } } AFSAcquireShared( &pFcb->NPFcb->Resource, @@ -1419,9 +1449,23 @@ AFSQueryNetworkInfo( IN PIRP Irp, &pCcb->AuthGroup, &stFileInfo))) { - ulFileAttribs = stFileInfo.FileAttributes; - ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT; + if ( ulFileAttribs == FILE_ATTRIBUTE_NORMAL) + { + + ulFileAttribs = FILE_ATTRIBUTE_REPARSE_POINT; + } + else + { + + ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT; + } + + if ( stFileInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + + ulFileAttribs |= FILE_ATTRIBUTE_DIRECTORY; + } } AFSAcquireShared( &pFcb->NPFcb->Resource, @@ -1596,9 +1640,23 @@ AFSQueryAttribTagInfo( IN PIRP Irp, &pCcb->AuthGroup, &stFileInfo))) { - ulFileAttribs = stFileInfo.FileAttributes; - ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT; + if ( ulFileAttribs == FILE_ATTRIBUTE_NORMAL) + { + + ulFileAttribs = FILE_ATTRIBUTE_REPARSE_POINT; + } + else + { + + ulFileAttribs |= FILE_ATTRIBUTE_REPARSE_POINT; + } + + if ( stFileInfo.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + + ulFileAttribs |= FILE_ATTRIBUTE_DIRECTORY; + } } AFSAcquireShared( &pFcb->NPFcb->Resource, -- 1.9.4