From 422f2d4523ae9be2ff3f1395db1dd62b0b3a3b4b Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Tue, 6 Jun 2006 17:57:43 +0000 Subject: [PATCH] windows-smb-mountpt-is-dir-20060606 Be consistent about reporting mountpoints and invalid links as directories to the CIFS client. --- src/WINNT/afsd/cm_vnodeops.c | 2 -- src/WINNT/afsd/smb.c | 3 ++- src/WINNT/afsd/smb3.c | 20 +++++++++++++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/WINNT/afsd/cm_vnodeops.c b/src/WINNT/afsd/cm_vnodeops.c index 44b79f89a..1626e51f8 100644 --- a/src/WINNT/afsd/cm_vnodeops.c +++ b/src/WINNT/afsd/cm_vnodeops.c @@ -3460,7 +3460,6 @@ long cm_LockCheckPerms(cm_scache_t * scp, lock_type == LockWrite && scp->creator == userp) { /* check for PRSFS_INSERT. */ - cm_ucell_t * ucp; code = cm_SyncOp(scp, NULL, userp, reqp, PRSFS_INSERT, CM_SCACHESYNC_GETSTATUS | @@ -3470,7 +3469,6 @@ long cm_LockCheckPerms(cm_scache_t * scp, osi_Log0(afsd_logp, "cm_LockCheckPerms user is creator but has no INSERT bits for scp"); } - return_code: osi_Log1(afsd_logp, "cm_LockCheckPerms returning code %d", code); return code; diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index d23df4b73..968a6219a 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -4773,7 +4773,8 @@ long smb_ReceiveCoreGetFileAttributes(smb_vc_t *vcp, smb_packet_t *inp, smb_pack * in a readonly volume doesn't mean it shojuld be marked as RO */ if (newScp->fileType == CM_SCACHETYPE_DIRECTORY || - newScp->fileType == CM_SCACHETYPE_MOUNTPOINT) + newScp->fileType == CM_SCACHETYPE_MOUNTPOINT || + newScp->fileType == CM_SCACHETYPE_INVALID) attrs = SMB_ATTR_DIRECTORY; else attrs = 0; diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 5a23c5d00..9f046c6d7 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -2828,7 +2828,9 @@ long smb_ReceiveTran2QPathInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *((u_long *)op) = scp->linkCount; op += 4; *op++ = 0; *op++ = 0; - *op++ = (scp->fileType == CM_SCACHETYPE_DIRECTORY ? 1 : 0); + *op++ = ((scp->fileType == CM_SCACHETYPE_DIRECTORY || + scp->fileType == CM_SCACHETYPE_MOUNTPOINT || + scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0); *op++ = 0; } else if (infoLevel == SMB_QUERY_FILE_EA_INFO) { @@ -2950,7 +2952,9 @@ long smb_ReceiveTran2QFileInfo(smb_vc_t *vcp, smb_tran2Packet_t *p, smb_packet_t *((LARGE_INTEGER *)op) = scp->length; op += 8; /* EOF */ *((u_long *)op) = scp->linkCount; op += 4; *op++ = (delonclose ? 1 : 0); - *op++ = (scp->fileType == CM_SCACHETYPE_DIRECTORY ? 1 : 0); + *op++ = ((scp->fileType == CM_SCACHETYPE_DIRECTORY || + scp->fileType == CM_SCACHETYPE_MOUNTPOINT || + scp->fileType == CM_SCACHETYPE_INVALID)? 1 : 0); *op++ = 0; *op++ = 0; } @@ -6122,7 +6126,9 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) smb_SetSMBParm(outp, parmSlot, 0); parmSlot++; /* filetype */ smb_SetSMBParm(outp, parmSlot, 0); parmSlot++; /* dev state */ smb_SetSMBParmByte(outp, parmSlot, - scp->fileType == CM_SCACHETYPE_DIRECTORY); /* is a dir? */ + (scp->fileType == CM_SCACHETYPE_DIRECTORY || + scp->fileType == CM_SCACHETYPE_MOUNTPOINT || + scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0); /* is a dir? */ lock_ReleaseMutex(&scp->mx); smb_SetSMBDataLength(outp, 0); @@ -6755,7 +6761,9 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out *((LARGE_INTEGER *)outData) = scp->length; outData += 8; /* EOF */ *((USHORT *)outData) = 0; outData += 2; /* filetype */ *((USHORT *)outData) = 0; outData += 2; /* dev state */ - *((USHORT *)outData) = (scp->fileType == CM_SCACHETYPE_DIRECTORY); + *((USHORT *)outData) = ((scp->fileType == CM_SCACHETYPE_DIRECTORY || + scp->fileType == CM_SCACHETYPE_MOUNTPOINT || + scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0); outData += 2; /* is a dir? */ lock_ReleaseMutex(&scp->mx); } else { @@ -6803,7 +6811,9 @@ long smb_ReceiveNTTranCreate(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *out *((LARGE_INTEGER *)outData) = scp->length; outData += 8; /* EOF */ *((USHORT *)outData) = 0; outData += 2; /* filetype */ *((USHORT *)outData) = 0; outData += 2; /* dev state */ - *((USHORT *)outData) = (scp->fileType == CM_SCACHETYPE_DIRECTORY); + *((USHORT *)outData) = ((scp->fileType == CM_SCACHETYPE_DIRECTORY || + scp->fileType == CM_SCACHETYPE_MOUNTPOINT || + scp->fileType == CM_SCACHETYPE_INVALID) ? 1 : 0); outData += 1; /* is a dir? */ memset(outData,0,24); outData += 24; /* Volume ID and file ID */ *((ULONG *)outData) = 0x001f01ffL; outData += 4; /* Maxmimal access rights */ -- 2.39.5