windows-fake-stat-20070622
authorJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 22 Jun 2007 07:00:27 +0000 (07:00 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Fri, 22 Jun 2007 07:00:27 +0000 (07:00 +0000)
When we are faking the status data we can use the vnode value to determine
if the object should be treated as a directory or file.  even is a directory
and odd is a file.  This works even when we have never successfully
obtained status data for the object.

src/WINNT/afsd/smb3.c

index 480c92d..abb28f3 100644 (file)
@@ -3713,7 +3713,17 @@ smb_ApplyV3DirListPatches(cm_scache_t *dscp,
                     *((u_long *)dptr) = SMB_ATTR_DIRECTORY;
                     break;
                 default:
-                    *((u_long *)dptr) = SMB_ATTR_NORMAL;
+                    /* if we get here we either have a normal file
+                     * or we have a file for which we have never 
+                     * received status info.  In this case, we can
+                     * check the even/odd value of the entry's vnode.
+                     * even means it is to be treated as a directory
+                     * and odd means it is to be treated as a file.
+                     */
+                    if (mustFake && (scp->fid.vnode % 2 == 0))
+                        *((u_long *)dptr) = SMB_ATTR_DIRECTORY;
+                    else
+                        *((u_long *)dptr) = SMB_ATTR_NORMAL;
                         
                 }
                 /* merge in hidden attribute */