Windows: File Info Query Symlinks
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 1 Oct 2012 16:03:49 +0000 (12:03 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Mon, 1 Oct 2012 23:23:53 +0000 (16:23 -0700)
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 <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>

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

index fe9654d..3353256 100644 (file)
@@ -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,