Windows: invalidate rdr for CM_SCACHE_VERSION_BAD
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 1 Dec 2011 04:29:56 +0000 (23:29 -0500)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Thu, 1 Dec 2011 19:51:04 +0000 (11:51 -0800)
If the cm_scache_t.dataVersion is set to CM_SCACHE_VERSION_BAD,
invalidate the redirector notion of status so that we do not
leak info to users that do not have permission.

If the dataVersion is CM_SCACHE_VERSION_BAD and is updated
with real status info, invalidate the redirector so it attempts
to read the directory contents.

Change-Id: Iaa15b37f7f1863169ffe93ae9bc3d24086a3b734
Reviewed-on: http://gerrit.openafs.org/6159
Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com>
Tested-by: Jeffrey Altman <jaltman@secure-endpoints.com>

src/WINNT/afsd/cm_scache.c

index a4fccdc..0e9b273 100644 (file)
@@ -1603,7 +1603,9 @@ void cm_MergeStatus(cm_scache_t *dscp,
             scp->parentVnode = 0;
             scp->parentUnique = 0;
        }
-       goto done;
+
+        if (RDR_Initialized)
+            rdr_invalidate = 1;
     } else {
        _InterlockedAnd(&scp->flags, ~CM_SCACHEFLAG_EACCESS);
     }
@@ -1804,8 +1806,10 @@ void cm_MergeStatus(cm_scache_t *dscp,
          scp->bufDataVersionLow == 0)
         scp->bufDataVersionLow = dataVersion;
 
-    if (RDR_Initialized && scp->dataVersion != CM_SCACHE_VERSION_BAD) {
-        if ( ( !(reqp->flags & CM_REQ_SOURCE_REDIR) || !(flags & (CM_MERGEFLAG_DIROP|CM_MERGEFLAG_STOREDATA))) &&
+    if (RDR_Initialized) {
+        if (scp->dataVersion != CM_SCACHE_VERSION_BAD) {
+            rdr_invalidate = 1;
+        } else if ( ( !(reqp->flags & CM_REQ_SOURCE_REDIR) || !(flags & (CM_MERGEFLAG_DIROP|CM_MERGEFLAG_STOREDATA))) &&
              scp->dataVersion != dataVersion && (dataVersion - scp->dataVersion > activeRPCs - 1)) {
             rdr_invalidate = 1;
         } else if ( (reqp->flags & CM_REQ_SOURCE_REDIR) && (flags & (CM_MERGEFLAG_DIROP|CM_MERGEFLAG_STOREDATA)) &&