it is not valid to set a UNLOCK flag on a lock request
authorAndrew Tridgell <tridge@samba.org>
Mon, 2 Jun 2008 23:36:02 +0000 (09:36 +1000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 2 Jun 2008 23:36:02 +0000 (09:36 +1000)
source/ntvfs/ntvfs_generic.c

index a3a8fcb1f42a966ab5498e979591b903e1dc631f..4f3a7e21983743dc8249770c014a2827dc419488 100644 (file)
@@ -1067,9 +1067,13 @@ NTSTATUS ntvfs_map_lock(struct ntvfs_module_context *ntvfs,
                             (SMB2_LOCK_FLAG_SHARED|SMB2_LOCK_FLAG_EXCLUSIVE))) {
                                return NT_STATUS_INVALID_PARAMETER;
                        }
-                       lck2->generic.in.locks[i].pid = req->smbpid;
+                       if (!isunlock && 
+                           (lck->smb2.in.locks[i].flags & SMB2_LOCK_FLAG_UNLOCK)) {
+                               return NT_STATUS_INVALID_PARAMETER;
+                       }
+                       lck2->generic.in.locks[i].pid    = req->smbpid;
                        lck2->generic.in.locks[i].offset = lck->smb2.in.locks[i].offset;
-                       lck2->generic.in.locks[i].count = lck->smb2.in.locks[i].length;
+                       lck2->generic.in.locks[i].count  = lck->smb2.in.locks[i].length;
                        if (!(lck->smb2.in.locks[i].flags & SMB2_LOCK_FLAG_EXCLUSIVE)) {
                                lck2->generic.in.mode = LOCKING_ANDX_SHARED_LOCK;
                        }