remove dropbox attribute leak fix
[openafs.git] / src / afs / VNOPS / afs_vnop_attrs.c
index b1c1fea..980611a 100644 (file)
@@ -189,6 +189,7 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, afs_ucred_t *acred)
     afs_int32 code;
     struct vrequest treq;
     struct unixuser *au;
+    int inited = 0;
     OSI_VC_CONVERT(avc);
 
     AFS_STATCNT(afs_getattr);
@@ -212,23 +213,15 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, afs_ucred_t *acred)
        afs_PutFakeStat(&fakestat);
        return code;
     }
-
-#if defined(AFS_SUN5_ENV) || defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN80_ENV)
 #if defined(AFS_SUN5_ENV)
-       if (flags & ATTR_HINT)
-#else
-       if (avc->f.states & CUBCinit)
+    if (flags & ATTR_HINT) {
+       code = afs_CopyOutAttrs(avc, attrs);
+       return code;
+    }
 #endif
-    {
-       if (!(code = afs_InitReq(&treq, acred))) {
-           if (vType(avc) != VDIR && vType(avc) != VLNK &&
-               !afs_AccessOK(avc, PRSFS_READ, &treq, DONT_CHECK_MODE_BITS)) {
-
-               code = EACCES;
-           }
-           if (!code)
-               code = afs_CopyOutAttrs(avc, attrs);
-       }
+#if defined(AFS_DARWIN_ENV) && !defined(AFS_DARWIN80_ENV)
+    if (avc->f.states & CUBCinit) {
+       code = afs_CopyOutAttrs(avc, attrs);
        return code;
     }
 #endif
@@ -242,11 +235,13 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, afs_ucred_t *acred)
     if (afs_shuttingdown)
        return EIO;
 
-    code = afs_InitReq(&treq, acred);
-
-    if (code == 0 && !(avc->f.states & CStatd)) {
-       code = afs_VerifyVCache2(avc, &treq);
-    }
+    if (!(avc->f.states & CStatd)) {
+       if (!(code = afs_InitReq(&treq, acred))) {
+           code = afs_VerifyVCache2(avc, &treq);
+           inited = 1;
+       }
+    } else
+       code = 0;
 
 #ifdef AFS_BOZONLOCK_ENV
     if (code == 0)
@@ -254,17 +249,17 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, afs_ucred_t *acred)
     afs_BozonUnlock(&avc->pvnLock, avc);
 #endif
 
-    if (code == 0 && vType(avc) != VDIR && vType(avc) != VLNK &&
-        !afs_AccessOK(avc, PRSFS_READ, &treq, DONT_CHECK_MODE_BITS)) {
-
-       code = EACCES;
-    }
 
     if (code == 0) {
        osi_FlushText(avc);     /* only needed to flush text if text locked last time */
        code = afs_CopyOutAttrs(avc, attrs);
 
        if (afs_nfsexporter) {
+           if (!inited) {
+               if ((code = afs_InitReq(&treq, acred)))
+                   return code;
+               inited = 1;
+           }
            if (AFS_NFSXLATORREQ(acred)) {
                if ((vType(avc) != VDIR)
                    && !afs_AccessOK(avc, PRSFS_READ, &treq,