svn commit: samba r22849 - in branches/SAMBA_4_0/source/ntvfs: .

metze at samba.org metze at samba.org
Mon May 14 13:47:05 GMT 2007


Author: metze
Date: 2007-05-14 13:47:03 +0000 (Mon, 14 May 2007)
New Revision: 22849

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22849

Log:
map smb2 lock to the generic level

metze
Modified:
   branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c


Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c	2007-05-14 13:36:14 UTC (rev 22848)
+++ branches/SAMBA_4_0/source/ntvfs/ntvfs_generic.c	2007-05-14 13:47:03 UTC (rev 22849)
@@ -33,6 +33,8 @@
 
 #include "includes.h"
 #include "ntvfs/ntvfs.h"
+#include "libcli/smb2/smb2.h"
+#include "libcli/smb2/smb2_calls.h"
 
 /* a second stage function converts from the out parameters of the generic
    call onto the out parameters of the specific call made */
@@ -960,28 +962,61 @@
 		return NT_STATUS_INVALID_LEVEL;
 
 	case RAW_LOCK_LOCK:
+		lck2->generic.level = RAW_LOCK_GENERIC;
+		lck2->generic.in.file.ntvfs= lck->lock.in.file.ntvfs;
+		lck2->generic.in.mode = 0;
+		lck2->generic.in.timeout = 0;
 		lck2->generic.in.ulock_cnt = 0;
 		lck2->generic.in.lock_cnt = 1;
+		lck2->generic.in.locks = locks;
+		locks->pid = req->smbpid;
+		locks->offset = lck->lock.in.offset;
+		locks->count = lck->lock.in.count;
 		break;
 
 	case RAW_LOCK_UNLOCK:
+		lck2->generic.level = RAW_LOCK_GENERIC;
+		lck2->generic.in.file.ntvfs= lck->unlock.in.file.ntvfs;
+		lck2->generic.in.mode = 0;
+		lck2->generic.in.timeout = 0;
 		lck2->generic.in.ulock_cnt = 1;
 		lck2->generic.in.lock_cnt = 0;
+		lck2->generic.in.locks = locks;
+		locks->pid = req->smbpid;
+		locks->offset = lck->unlock.in.offset;
+		locks->count = lck->unlock.in.count;
 		break;
 
 	case RAW_LOCK_SMB2:
-		return NT_STATUS_INVALID_LEVEL;
+		if (lck->smb2.in.unknown1 != 1) {
+			return NT_STATUS_INVALID_PARAMETER;
+		}
+
+		lck2->generic.level = RAW_LOCK_GENERIC;
+		lck2->generic.in.file.ntvfs= lck->smb2.in.file.ntvfs;
+		if (lck->smb2.in.flags & SMB2_LOCK_FLAG_EXCLUSIV) {
+			lck2->generic.in.mode = 0;
+		} else {
+			lck2->generic.in.mode = LOCKING_ANDX_SHARED_LOCK;
+		}
+		lck2->generic.in.timeout = 0;
+		if (lck->smb2.in.flags & SMB2_LOCK_FLAG_UNLOCK) {
+			lck2->generic.in.ulock_cnt = 1;
+			lck2->generic.in.lock_cnt = 0;
+		} else {
+			lck2->generic.in.ulock_cnt = 0;
+			lck2->generic.in.lock_cnt = 1;
+		}
+		lck2->generic.in.locks = locks;
+		locks->pid = 0;
+		locks->offset = lck->smb2.in.offset;
+		locks->count = lck->smb2.in.count;
+
+		/* initialize output value */
+		lck->smb2.out.unknown1 = 0;
+		break;
 	}
 
-	lck2->generic.level = RAW_LOCK_GENERIC;
-	lck2->generic.in.file.ntvfs= lck->lock.in.file.ntvfs;
-	lck2->generic.in.mode = 0;
-	lck2->generic.in.timeout = 0;
-	lck2->generic.in.locks = locks;
-	locks->pid = req->smbpid;
-	locks->offset = lck->lock.in.offset;
-	locks->count = lck->lock.in.count;
-
 	/* 
 	 * we don't need to call ntvfs_map_async_setup() here,
 	 * as lock() doesn't have any output fields



More information about the samba-cvs mailing list