STABLE14-windows-truncate-after-lock-check-20060116

In smb_ReceiveNTCreateX the lock check, cm_CheckNTOpen(), must take place
before we allow the file to be truncated.


(cherry picked from commit d921ee381aa46e4385524f0c31ca5ad606aa920a)
This commit is contained in:
Jeffrey Altman 2006-01-17 21:45:12 +00:00
parent 1e8b8ffbfd
commit a51692ee6d

View File

@ -5693,7 +5693,18 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
* scp is NULL.
*/
if (code == 0 && !treeCreate) {
if (createDisp == FILE_CREATE) {
code = cm_CheckNTOpen(scp, desiredAccess, createDisp, userp, &req);
if (code) {
if (dscp)
cm_ReleaseSCache(dscp);
if (scp)
cm_ReleaseSCache(scp);
cm_ReleaseUser(userp);
free(realPathp);
return code;
}
if (createDisp == FILE_CREATE) {
/* oops, file shouldn't be there */
if (dscp)
cm_ReleaseSCache(dscp);
@ -5733,16 +5744,6 @@ long smb_ReceiveNTCreateX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp)
else
openAction = 1; /* found existing file */
code = cm_CheckNTOpen(scp, desiredAccess, createDisp, userp, &req);
if (code) {
if (dscp)
cm_ReleaseSCache(dscp);
if (scp)
cm_ReleaseSCache(scp);
cm_ReleaseUser(userp);
free(realPathp);
return code;
}
} else if (createDisp == FILE_OPEN || createDisp == FILE_OVERWRITE) {
/* don't create if not found */
if (dscp)