From: James Peterson Date: Wed, 4 Dec 2002 14:26:43 +0000 (+0000) Subject: STABLE12-windows-rename-warning-20021126 X-Git-Tag: openafs-stable-1_2_8~11 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=d91edbc90ad960e4e9c285d22812faba70f662a9;p=packages%2Fo%2Fopenafs.git STABLE12-windows-rename-warning-20021126 Currently AFS doesn't handle Explorer operations 'rename' and 'move' correctly. Normal operation of 'rename' and 'move' is to warn the operator when the destination file name already exist. (cherry picked from commit f5ff298ec5dcc3607621321e5785374bbed591fc) --- diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index b2a95af72..21aac83ff 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -3831,6 +3831,7 @@ long smb_ReceiveCoreRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) smb_renameRock_t rock; cm_scache_t *oldDscp; cm_scache_t *newDscp; + cm_scache_t *tmpscp; char *oldLastNamep; char *newLastNamep; osi_hyper_t thyper; @@ -3914,6 +3915,14 @@ long smb_ReceiveCoreRename(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) */ thyper.LowPart = 0; /* search dir from here */ thyper.HighPart = 0; + /* search for file to already exhist, if so return error*/ + + code = cm_Lookup(newDscp,newLastNamep,CM_FLAG_CHECKPATH,userp,&req,&tmpscp); + if((code != CM_ERROR_NOSUCHFILE) && (code != CM_ERROR_NOSUCHPATH) && (code != CM_ERROR_NOSUCHVOLUME) ) { + cm_ReleaseSCache(tmpscp); + return CM_ERROR_EXISTS; /* file exist, do not rename, also + fixes move*/ + } code = cm_ApplyDir(oldDscp, smb_RenameProc, &rock, &thyper, userp, &req, NULL); if (code == CM_ERROR_STOPNOW)