[SCM] Samba Shared Repository - branch master updated

Noel Power npower at samba.org
Thu Jan 6 16:04:02 UTC 2022


The branch, master has been updated
       via  ea9dc21a230 s3: smbd: Remove now redundent lock_flav parameter from smbd_do_unlocking().
       via  07c74582c0f s3: smbd: Remove lock_flav argument from smbd_smb1_brl_finish_by_lock().
       via  8ec30dade11 s3: smbd: Remove lock_flav argument from internal function smbd_smb1_do_locks_check()
       via  b03e0da5288 s3: smbd: Remove lock_flav argument from smbd_smb1_do_locks_send().
       via  c1d59934894 s3: smbd: In smbd_smb1_do_locks_send() move access of lock_flav until after we know we have locks in the array.
       via  4a567652422 s3: smbd: Remove lock_flav parameter from smbd_do_locks_try().
       via  85e131b54ba s3: smbd: Move implicit call to lp_posix_cifsu_locktype() out of init_strict_lock_struct().
       via  9a0212800cb s3: smbd: Add "enum brl_flavour" to struct smbd_lock_element.
      from  099c62a654d s3: smbclient: In do_host_query(), if we need SMB1, ensure we select NT1 as the client max protocol" before continuing.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit ea9dc21a2308b9d8ad51d3205327e9e91ade9d84
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 17:04:02 2021 -0800

    s3: smbd: Remove now redundent lock_flav parameter from smbd_do_unlocking().
    
    We already stored this in struct smbd_lock_element.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>
    
    Autobuild-User(master): Noel Power <npower at samba.org>
    Autobuild-Date(master): Thu Jan  6 16:03:28 UTC 2022 on sn-devel-184

commit 07c74582c0f9fd74d00a667879787cdde1de3fb3
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 16:56:02 2021 -0800

    s3: smbd: Remove lock_flav argument from smbd_smb1_brl_finish_by_lock().
    
    We lookup the lock array from the state stored in the passed-in req
    and all the locks in an array are always the same flavour, so this
    isn't needed.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

commit 8ec30dade11c85b6f6b55a3ab564167f79ba3b0f
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 16:48:58 2021 -0800

    s3: smbd: Remove lock_flav argument from internal function smbd_smb1_do_locks_check()
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

commit b03e0da5288667933d69b8a162534cdec8bc9b25
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 16:41:09 2021 -0800

    s3: smbd: Remove lock_flav argument from smbd_smb1_do_locks_send().
    
    And also inside struct smbd_smb1_do_locks_state.
    All calls to this always (a) have one or more locks of the same type.
    (the setup for smbd_smb1_do_locks_send() ensures there is always
    at least one lock) and (b) always set locks[0].lock_flav correctly before calling.
    
    lock_flav is thus a redundent argument. Removing it means
    we can never drift out of sync with the lock_flav element
    in the passed in locks array.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

commit c1d5993489472ac857f83729c901004f26866d6f
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 16:15:54 2021 -0800

    s3: smbd: In smbd_smb1_do_locks_send() move access of lock_flav until after we know we have locks in the array.
    
    When we remove the lock_flav parameter this will need to look into the array itself.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

commit 4a567652422f8fcf507fa8e5ec7300d7014268a0
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 15:06:59 2021 -0800

    s3: smbd: Remove lock_flav parameter from smbd_do_locks_try().
    
    This is now contained in the struct smbd_lock_element for
    each lock.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

commit 85e131b54ba91f349316d9d637b4344d1a642bc5
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 15:00:03 2021 -0800

    s3: smbd: Move implicit call to lp_posix_cifsu_locktype() out of init_strict_lock_struct().
    
    Make it explicit. When we add POSIX handles to SMB2 we will only
    look at the handle type. lp_posix_cifsu_locktype() already does this,
    but hidden inside init_strict_lock_struct() makes it hard to see.
    
    No logic change.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

commit 9a0212800cbc51e51e069334f1d5f3aa0e239086
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Nov 16 14:26:44 2021 -0800

    s3: smbd: Add "enum brl_flavour" to struct smbd_lock_element.
    
    Initialized correctly but not yet used.
    Will allow 'brl_flavour' to be removed from lock calls.
    This will allow SMB2 POSIX handles to call with POSIX_LOCK
    flavour instead of always using WINDOWS_LOCK (as now).
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

-----------------------------------------------------------------------

Summary of changes:
 source3/include/locking.h         |   1 +
 source3/locking/locking.c         |   1 +
 source3/locking/proto.h           |   1 +
 source3/modules/vfs_btrfs.c       |   2 +
 source3/modules/vfs_default.c     |   4 ++
 source3/smbd/aio.c                |  40 ++++++++++-----
 source3/smbd/blocking.c           |  38 +++++---------
 source3/smbd/globals.h            |   3 +-
 source3/smbd/proto.h              |   3 --
 source3/smbd/reply.c              | 105 ++++++++++++++++++++++++--------------
 source3/smbd/smb2_ioctl_filesys.c |   1 +
 source3/smbd/smb2_lock.c          |   4 +-
 source3/smbd/smb2_read.c          |   2 +
 source3/smbd/smb2_write.c         |   1 +
 source3/smbd/trans2.c             |   5 +-
 15 files changed, 127 insertions(+), 84 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/locking.h b/source3/include/locking.h
index 3629d86c556..f9eb502b758 100644
--- a/source3/include/locking.h
+++ b/source3/include/locking.h
@@ -67,6 +67,7 @@ struct smbd_lock_element {
 	struct GUID req_guid;
 	uint64_t smblctx;
 	enum brl_type brltype;
+	enum brl_flavour lock_flav;
 	uint64_t offset;
 	uint64_t count;
 };
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index 5fd117ac31e..b002e80fee4 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -90,6 +90,7 @@ void init_strict_lock_struct(files_struct *fsp,
 				br_off start,
 				br_off size,
 				enum brl_type lock_type,
+				enum brl_flavour lock_flav,
 				struct lock_struct *plock)
 {
 	SMB_ASSERT(lock_type == READ_LOCK || lock_type == WRITE_LOCK);
diff --git a/source3/locking/proto.h b/source3/locking/proto.h
index 72d037040f2..d6e7a54a766 100644
--- a/source3/locking/proto.h
+++ b/source3/locking/proto.h
@@ -98,6 +98,7 @@ void init_strict_lock_struct(files_struct *fsp,
 				br_off start,
 				br_off size,
 				enum brl_type lock_type,
+				enum brl_flavour lock_flav,
 				struct lock_struct *plock);
 bool strict_lock_check_default(files_struct *fsp,
 			       struct lock_struct *plock);
diff --git a/source3/modules/vfs_btrfs.c b/source3/modules/vfs_btrfs.c
index 53e6a3fd7c7..309923a9320 100644
--- a/source3/modules/vfs_btrfs.c
+++ b/source3/modules/vfs_btrfs.c
@@ -343,6 +343,7 @@ static struct tevent_req *btrfs_offload_write_send(struct vfs_handle_struct *han
 					src_off,
 					num,
 					READ_LOCK,
+					lp_posix_cifsu_locktype(src_fsp),
 					&src_lck);
 		if (!SMB_VFS_STRICT_LOCK_CHECK(src_fsp->conn, src_fsp, &src_lck)) {
 			tevent_req_nterror(req, NT_STATUS_FILE_LOCK_CONFLICT);
@@ -360,6 +361,7 @@ static struct tevent_req *btrfs_offload_write_send(struct vfs_handle_struct *han
 					dest_off,
 					num,
 					WRITE_LOCK,
+					lp_posix_cifsu_locktype(dest_fsp),
 					&dest_lck);
 
 		if (!SMB_VFS_STRICT_LOCK_CHECK(dest_fsp->conn, dest_fsp, &dest_lck)) {
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index db25527bfd6..c52d29dc2fe 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -2245,6 +2245,7 @@ static NTSTATUS vfswrap_offload_copy_file_range(struct tevent_req *req)
 				state->src_off,
 				state->remaining,
 				READ_LOCK,
+				lp_posix_cifsu_locktype(state->src_fsp),
 				&lck);
 
 	ok = SMB_VFS_STRICT_LOCK_CHECK(state->src_fsp->conn,
@@ -2264,6 +2265,7 @@ static NTSTATUS vfswrap_offload_copy_file_range(struct tevent_req *req)
 				state->dst_off,
 				state->remaining,
 				WRITE_LOCK,
+				lp_posix_cifsu_locktype(state->dst_fsp),
 				&lck);
 
 	ok = SMB_VFS_STRICT_LOCK_CHECK(state->dst_fsp->conn,
@@ -2358,6 +2360,7 @@ static NTSTATUS vfswrap_offload_write_loop(struct tevent_req *req)
 				state->src_off,
 				state->next_io_size,
 				READ_LOCK,
+				lp_posix_cifsu_locktype(state->src_fsp),
 				&read_lck);
 
 	ok = SMB_VFS_STRICT_LOCK_CHECK(state->src_fsp->conn,
@@ -2421,6 +2424,7 @@ static void vfswrap_offload_write_read_done(struct tevent_req *subreq)
 				state->dst_off,
 				state->next_io_size,
 				WRITE_LOCK,
+				lp_posix_cifsu_locktype(state->dst_fsp),
 				&write_lck);
 
 	ok = SMB_VFS_STRICT_LOCK_CHECK(state->dst_fsp->conn,
diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c
index 038487ad4ba..95f18217868 100644
--- a/source3/smbd/aio.c
+++ b/source3/smbd/aio.c
@@ -207,9 +207,13 @@ NTSTATUS schedule_aio_read_and_X(connection_struct *conn,
 	SCVAL(aio_ex->outbuf.data,smb_vwv0,0xFF); /* Never a chained reply. */
 	SCVAL(smb_buf(aio_ex->outbuf.data), 0, 0); /* padding byte */
 
-	init_strict_lock_struct(fsp, (uint64_t)smbreq->smbpid,
-		(uint64_t)startpos, (uint64_t)smb_maxcnt, READ_LOCK,
-		&aio_ex->lock);
+	init_strict_lock_struct(fsp,
+			(uint64_t)smbreq->smbpid,
+			(uint64_t)startpos,
+			(uint64_t)smb_maxcnt,
+			READ_LOCK,
+			lp_posix_cifsu_locktype(fsp),
+			&aio_ex->lock);
 
 	/* Take the lock until the AIO completes. */
 	if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &aio_ex->lock)) {
@@ -472,9 +476,13 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
 	srv_set_message((char *)aio_ex->outbuf.data, 6, 0, True);
 	SCVAL(aio_ex->outbuf.data,smb_vwv0,0xFF); /* Never a chained reply. */
 
-	init_strict_lock_struct(fsp, (uint64_t)smbreq->smbpid,
-		(uint64_t)startpos, (uint64_t)numtowrite, WRITE_LOCK,
-		&aio_ex->lock);
+	init_strict_lock_struct(fsp,
+			(uint64_t)smbreq->smbpid,
+			(uint64_t)startpos,
+			(uint64_t)numtowrite,
+			WRITE_LOCK,
+			lp_posix_cifsu_locktype(fsp),
+			&aio_ex->lock);
 
 	/* Take the lock until the AIO completes. */
 	if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &aio_ex->lock)) {
@@ -720,9 +728,13 @@ NTSTATUS schedule_smb2_aio_read(connection_struct *conn,
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	init_strict_lock_struct(fsp, fsp->op->global->open_persistent_id,
-		(uint64_t)startpos, (uint64_t)smb_maxcnt, READ_LOCK,
-		&aio_ex->lock);
+	init_strict_lock_struct(fsp,
+			fsp->op->global->open_persistent_id,
+			(uint64_t)startpos,
+			(uint64_t)smb_maxcnt,
+			READ_LOCK,
+			lp_posix_cifsu_locktype(fsp),
+			&aio_ex->lock);
 
 	/* Take the lock until the AIO completes. */
 	if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &aio_ex->lock)) {
@@ -857,9 +869,13 @@ NTSTATUS schedule_aio_smb2_write(connection_struct *conn,
 
 	aio_ex->write_through = write_through;
 
-	init_strict_lock_struct(fsp, fsp->op->global->open_persistent_id,
-		in_offset, (uint64_t)in_data.length, WRITE_LOCK,
-		&aio_ex->lock);
+	init_strict_lock_struct(fsp,
+			fsp->op->global->open_persistent_id,
+			in_offset,
+			(uint64_t)in_data.length,
+			WRITE_LOCK,
+			lp_posix_cifsu_locktype(fsp),
+			&aio_ex->lock);
 
 	/* Take the lock until the AIO completes. */
 	if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &aio_ex->lock)) {
diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c
index ef2fe321f5c..10d657bb838 100644
--- a/source3/smbd/blocking.c
+++ b/source3/smbd/blocking.c
@@ -31,7 +31,6 @@
 
 NTSTATUS smbd_do_locks_try(
 	struct files_struct *fsp,
-	enum brl_flavour lock_flav,
 	uint16_t num_locks,
 	struct smbd_lock_element *locks,
 	uint16_t *blocker_idx,
@@ -52,7 +51,7 @@ NTSTATUS smbd_do_locks_try(
 			e->count,
 			e->offset,
 			e->brltype,
-			lock_flav,
+			e->lock_flav,
 			blocking_pid,
 			blocking_smblctx);
 		if (!NT_STATUS_IS_OK(status)) {
@@ -75,7 +74,7 @@ NTSTATUS smbd_do_locks_try(
 			  e->smblctx,
 			  e->count,
 			  e->offset,
-			  lock_flav);
+			  e->lock_flav);
 	}
 
 	return status;
@@ -109,7 +108,6 @@ struct smbd_smb1_do_locks_state {
 	uint32_t retry_msecs;
 	struct timeval endtime;
 	bool large_offset;	/* required for correct cancel */
-	enum brl_flavour lock_flav;
 	uint16_t num_locks;
 	struct smbd_lock_element *locks;
 	uint16_t blocker;
@@ -122,7 +120,6 @@ static void smbd_smb1_blocked_locks_cleanup(
 	struct tevent_req *req, enum tevent_req_state req_state);
 static NTSTATUS smbd_smb1_do_locks_check(
 	struct files_struct *fsp,
-	enum brl_flavour lock_flav,
 	uint16_t num_locks,
 	struct smbd_lock_element *locks,
 	uint16_t *blocker_idx,
@@ -251,7 +248,6 @@ struct tevent_req *smbd_smb1_do_locks_send(
 	struct files_struct *fsp,
 	uint32_t lock_timeout,
 	bool large_offset,
-	enum brl_flavour lock_flav,
 	uint16_t num_locks,
 	struct smbd_lock_element *locks)
 {
@@ -269,28 +265,26 @@ struct tevent_req *smbd_smb1_do_locks_send(
 	state->fsp = fsp;
 	state->timeout = lock_timeout;
 	state->large_offset = large_offset;
-	state->lock_flav = lock_flav;
 	state->num_locks = num_locks;
 	state->locks = locks;
-
-	if (lock_flav == POSIX_LOCK) {
-		/*
-		 * SMB1 posix locks always use
-		 * NT_STATUS_FILE_LOCK_CONFLICT.
-		 */
-		state->deny_status = NT_STATUS_FILE_LOCK_CONFLICT;
-	} else {
-		state->deny_status = NT_STATUS_LOCK_NOT_GRANTED;
-	}
+	state->deny_status = NT_STATUS_LOCK_NOT_GRANTED;
 
 	DBG_DEBUG("state=%p, state->smbreq=%p\n", state, state->smbreq);
 
-	if (num_locks == 0) {
+	if (num_locks == 0 || locks == NULL) {
 		DBG_DEBUG("no locks\n");
 		tevent_req_done(req);
 		return tevent_req_post(req, ev);
 	}
 
+	if (state->locks[0].lock_flav == POSIX_LOCK) {
+		/*
+		 * SMB1 posix locks always use
+		 * NT_STATUS_FILE_LOCK_CONFLICT.
+		 */
+		state->deny_status = NT_STATUS_FILE_LOCK_CONFLICT;
+	}
+
 	smbd_smb1_do_locks_try(req);
 	if (!tevent_req_is_in_progress(req)) {
 		return tevent_req_post(req, ev);
@@ -386,7 +380,6 @@ static NTSTATUS smbd_smb1_do_locks_check_blocked(
 
 static NTSTATUS smbd_smb1_do_locks_check(
 	struct files_struct *fsp,
-	enum brl_flavour lock_flav,
 	uint16_t num_locks,
 	struct smbd_lock_element *locks,
 	uint16_t *blocker_idx,
@@ -413,7 +406,6 @@ static NTSTATUS smbd_smb1_do_locks_check(
 
 		if (blocked_state->locks == locks) {
 			SMB_ASSERT(blocked_state->num_locks == num_locks);
-			SMB_ASSERT(blocked_state->lock_flav == lock_flav);
 
 			/*
 			 * We found ourself...
@@ -437,7 +429,6 @@ static NTSTATUS smbd_smb1_do_locks_check(
 
 	status = smbd_do_locks_try(
 		fsp,
-		lock_flav,
 		num_locks,
 		locks,
 		blocker_idx,
@@ -472,7 +463,6 @@ static void smbd_smb1_do_locks_try(struct tevent_req *req)
 
 	status = smbd_smb1_do_locks_check(
 		fsp,
-		state->lock_flav,
 		state->num_locks,
 		state->locks,
 		&state->blocker,
@@ -697,7 +687,6 @@ void smbd_smb1_brl_finish_by_req(struct tevent_req *req, NTSTATUS status)
 bool smbd_smb1_brl_finish_by_lock(
 	struct files_struct *fsp,
 	bool large_offset,
-	enum brl_flavour lock_flav,
 	struct smbd_lock_element lock,
 	NTSTATUS finish_status)
 {
@@ -715,8 +704,7 @@ bool smbd_smb1_brl_finish_by_lock(
 
 		DBG_DEBUG("i=%zu, req=%p\n", i, req);
 
-		if ((state->large_offset != large_offset) ||
-		    (state->lock_flav != lock_flav)) {
+		if (state->large_offset != large_offset) {
 			continue;
 		}
 
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index 4fa8ebd8355..eef38f00a4e 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -118,8 +118,7 @@ struct GUID smbd_request_guid(struct smb_request *smb1req, uint16_t idx);
 NTSTATUS smbd_do_unlocking(struct smb_request *req,
 			   files_struct *fsp,
 			   uint16_t num_ulocks,
-			   struct smbd_lock_element *ulocks,
-			   enum brl_flavour lock_flav);
+			   struct smbd_lock_element *ulocks);
 
 NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn,
 			       TALLOC_CTX *mem_ctx,
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 3b0d34514c9..0a73c82bad3 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -99,7 +99,6 @@ bool aio_add_req_to_fsp(files_struct *fsp, struct tevent_req *req);
 
 NTSTATUS smbd_do_locks_try(
 	struct files_struct *fsp,
-	enum brl_flavour lock_flav,
 	uint16_t num_locks,
 	struct smbd_lock_element *locks,
 	uint16_t *blocker_idx,
@@ -112,7 +111,6 @@ struct tevent_req *smbd_smb1_do_locks_send(
 	struct files_struct *fsp,
 	uint32_t lock_timeout,
 	bool large_offset,
-	enum brl_flavour lock_flav,
 	uint16_t num_locks,
 	struct smbd_lock_element *locks);
 NTSTATUS smbd_smb1_do_locks_recv(struct tevent_req *req);
@@ -124,7 +122,6 @@ void smbd_smb1_brl_finish_by_req(struct tevent_req *req, NTSTATUS status);
 bool smbd_smb1_brl_finish_by_lock(
 	struct files_struct *fsp,
 	bool large_offset,
-	enum brl_flavour lock_flav,
 	struct smbd_lock_element lock,
 	NTSTATUS finish_status);
 bool smbd_smb1_brl_finish_by_mid(
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index eeae563766a..ac5f253b353 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -3697,9 +3697,13 @@ void reply_readbraw(struct smb_request *req)
 	/* ensure we don't overrun the packet size */
 	maxcount = MIN(65535,maxcount);
 
-	init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
-	    (uint64_t)startpos, (uint64_t)maxcount, READ_LOCK,
-	    &lock);
+	init_strict_lock_struct(fsp,
+			(uint64_t)req->smbpid,
+			(uint64_t)startpos,
+			(uint64_t)maxcount,
+			READ_LOCK,
+			lp_posix_cifsu_locktype(fsp),
+			&lock);
 
 	if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
 		reply_readbraw_error(xconn);
@@ -3794,6 +3798,7 @@ void reply_lockread(struct smb_request *req)
 		.req_guid = smbd_request_guid(req, 0),
 		.smblctx = req->smbpid,
 		.brltype = WRITE_LOCK,
+		.lock_flav = WINDOWS_LOCK,
 		.count = SVAL(req->vwv+1, 0),
 		.offset = IVAL_TO_SMB_OFF_T(req->vwv+2, 0),
 	};
@@ -3805,7 +3810,6 @@ void reply_lockread(struct smb_request *req)
 		fsp,
 		0,
 		false,		/* large_offset */
-		WINDOWS_LOCK,
 		1,
 		lck);
 	if (subreq == NULL) {
@@ -3964,9 +3968,13 @@ Returning short read of maximum allowed for compatibility with Windows 2000.\n",
 
 	data = smb_buf(req->outbuf) + 3;
 
-	init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
-	    (uint64_t)startpos, (uint64_t)numtoread, READ_LOCK,
-	    &lock);
+	init_strict_lock_struct(fsp,
+			(uint64_t)req->smbpid,
+			(uint64_t)startpos,
+			(uint64_t)numtoread,
+			READ_LOCK,
+			lp_posix_cifsu_locktype(fsp),
+			&lock);
 
 	if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
 		reply_nterror(req, NT_STATUS_FILE_LOCK_CONFLICT);
@@ -4041,9 +4049,13 @@ static void send_file_readX(connection_struct *conn, struct smb_request *req,
 	int saved_errno = 0;
 	NTSTATUS status;
 
-	init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
-	    (uint64_t)startpos, (uint64_t)smb_maxcnt, READ_LOCK,
-	    &lock);
+	init_strict_lock_struct(fsp,
+			(uint64_t)req->smbpid,
+			(uint64_t)startpos,
+			(uint64_t)smb_maxcnt,
+			READ_LOCK,
+			lp_posix_cifsu_locktype(fsp),
+			&lock);
 
 	if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
 		reply_nterror(req, NT_STATUS_FILE_LOCK_CONFLICT);
@@ -4564,9 +4576,13 @@ void reply_writebraw(struct smb_request *req)
 	}
 
 	if (!fsp->print_file) {
-		init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
-		    (uint64_t)startpos, (uint64_t)tcount, WRITE_LOCK,
-		    &lock);
+		init_strict_lock_struct(fsp,
+				(uint64_t)req->smbpid,
+				(uint64_t)startpos,
+				(uint64_t)tcount,
+				WRITE_LOCK,
+				lp_posix_cifsu_locktype(fsp),
+				&lock);
 
 		if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
 			reply_nterror(req, NT_STATUS_FILE_LOCK_CONFLICT);
@@ -4779,9 +4795,13 @@ void reply_writeunlock(struct smb_request *req)
 	}
 
 	if (!fsp->print_file && numtowrite > 0) {
-		init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
-		    (uint64_t)startpos, (uint64_t)numtowrite, WRITE_LOCK,
-		    &lock);
+		init_strict_lock_struct(fsp,
+				(uint64_t)req->smbpid,
+				(uint64_t)startpos,
+				(uint64_t)numtowrite,
+				WRITE_LOCK,
+				lp_posix_cifsu_locktype(fsp),
+				&lock);
 
 		if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
 			reply_nterror(req, NT_STATUS_FILE_LOCK_CONFLICT);
@@ -4823,10 +4843,11 @@ void reply_writeunlock(struct smb_request *req)
 			.req_guid = smbd_request_guid(req, 0),
 			.smblctx = req->smbpid,
 			.brltype = UNLOCK_LOCK,
+			.lock_flav = WINDOWS_LOCK,
 			.offset = startpos,
 			.count = numtowrite,
 		};
-		status = smbd_do_unlocking(req, fsp, 1, &l, WINDOWS_LOCK);
+		status = smbd_do_unlocking(req, fsp, 1, &l);
 		if (NT_STATUS_V(status)) {
 			reply_nterror(req, status);
 			goto out;
@@ -4909,9 +4930,13 @@ void reply_write(struct smb_request *req)
 	}
 
 	if (!fsp->print_file) {
-		init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
-			(uint64_t)startpos, (uint64_t)numtowrite, WRITE_LOCK,
-			&lock);
+		init_strict_lock_struct(fsp,
+				(uint64_t)req->smbpid,
+				(uint64_t)startpos,
+				(uint64_t)numtowrite,
+				WRITE_LOCK,
+				lp_posix_cifsu_locktype(fsp),
+				&lock);
 
 		if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {
 			reply_nterror(req, NT_STATUS_FILE_LOCK_CONFLICT);
@@ -5205,9 +5230,13 @@ void reply_write_and_X(struct smb_request *req)
 			/* NT_STATUS_RETRY - fall through to sync write. */
 		}
 
-		init_strict_lock_struct(fsp, (uint64_t)req->smbpid,
-		    (uint64_t)startpos, (uint64_t)numtowrite, WRITE_LOCK,
-		    &lock);
+		init_strict_lock_struct(fsp,
+				(uint64_t)req->smbpid,
+				(uint64_t)startpos,
+				(uint64_t)numtowrite,
+				WRITE_LOCK,
+				lp_posix_cifsu_locktype(fsp),
+				&lock);
 
 		if (!SMB_VFS_STRICT_LOCK_CHECK(conn, fsp, &lock)) {


-- 
Samba Shared Repository



More information about the samba-cvs mailing list