From 82124f7e85594dabdde218db5a62761d694864ba Mon Sep 17 00:00:00 2001 From: Derrick Brashear Date: Wed, 24 Feb 2010 11:20:51 -0500 Subject: [PATCH] remove dropbox attribute leak fix change 6ec18461649d3e4f44b2476f886bcc480c456500, avoid leaking stat info, appears to have side effects on at least macos, crashing the system coreservicesd. revoke the change until the exact behavior we want is better understood. (cherry picked from commit 142883cae8de203822c8be4f975e691b57be2834) Change-Id: Id3a03e7b3982abb3947c9b3d1baa46c828169cdb Reviewed-on: http://gerrit.openafs.org/1389 Reviewed-by: Derrick Brashear Tested-by: Derrick Brashear --- src/afs/VNOPS/afs_vnop_attrs.c | 45 +++++++++++++++------------------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/src/afs/VNOPS/afs_vnop_attrs.c b/src/afs/VNOPS/afs_vnop_attrs.c index f0402010b9..a26f5dbaa0 100644 --- a/src/afs/VNOPS/afs_vnop_attrs.c +++ b/src/afs/VNOPS/afs_vnop_attrs.c @@ -188,6 +188,7 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *acred) struct vrequest treq; extern struct unixuser *afs_FindUser(); struct unixuser *au; + int inited = 0; OSI_VC_CONVERT(avc); AFS_STATCNT(afs_getattr); @@ -211,23 +212,15 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *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->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->states & CUBCinit) { + code = afs_CopyOutAttrs(avc, attrs); return code; } #endif @@ -239,11 +232,13 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *acred) if (afs_shuttingdown) return EIO; - code = afs_InitReq(&treq, acred); - - if (code == 0 && !(avc->states & CStatd)) { - code = afs_VerifyVCache2(avc, &treq); - } + if (!(avc->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) @@ -251,17 +246,17 @@ afs_getattr(OSI_VC_DECL(avc), struct vattr *attrs, struct AFS_UCRED *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,