[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