]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: Remove lock_flav argument from smbd_smb1_do_locks_send().
authorJeremy Allison <jra@samba.org>
Wed, 17 Nov 2021 00:41:09 +0000 (16:41 -0800)
committerNoel Power <npower@samba.org>
Thu, 6 Jan 2022 15:11:38 +0000 (15:11 +0000)
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@samba.org>
Reviewed-by: Noel Power <npower@samba.org>
source3/smbd/blocking.c
source3/smbd/proto.h
source3/smbd/reply.c
source3/smbd/trans2.c

index 5c4644566d1c8cf61b2c9540b850dec5be7ffc26..b3dfb4064890b5a786600e97f82c092e1830a5ac 100644 (file)
@@ -108,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;
@@ -250,7 +249,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)
 {
@@ -268,7 +266,6 @@ 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;
        state->deny_status = NT_STATUS_LOCK_NOT_GRANTED;
@@ -281,7 +278,7 @@ struct tevent_req *smbd_smb1_do_locks_send(
                return tevent_req_post(req, ev);
        }
 
-       if (lock_flav == POSIX_LOCK) {
+       if (state->locks[0].lock_flav == POSIX_LOCK) {
                /*
                 * SMB1 posix locks always use
                 * NT_STATUS_FILE_LOCK_CONFLICT.
@@ -411,7 +408,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...
@@ -460,6 +456,7 @@ static void smbd_smb1_do_locks_try(struct tevent_req *req)
        NTSTATUS status;
        bool ok;
        bool expired;
+       enum brl_flavour lock_flav = state->locks[0].lock_flav;
 
        lck = get_existing_share_mode_lock(state, fsp->file_id);
        if (tevent_req_nomem(lck, req)) {
@@ -469,7 +466,7 @@ static void smbd_smb1_do_locks_try(struct tevent_req *req)
 
        status = smbd_smb1_do_locks_check(
                fsp,
-               state->lock_flav,
+               lock_flav,
                state->num_locks,
                state->locks,
                &state->blocker,
@@ -713,7 +710,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)) {
+                   (state->locks[0].lock_flav != lock_flav)) {
                        continue;
                }
 
index a39eba9024d4376170fce93bb8eeefe913445eeb..d94efd4ba6c60a3e33582267ba5b67f0579d4e99 100644 (file)
@@ -111,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);
index 31181d6586a622c3ae0a9af1fbccae13c0cff775..f0676a308e71a50c0b23a592ad1fc72419b771df 100644 (file)
@@ -3810,7 +3810,6 @@ void reply_lockread(struct smb_request *req)
                fsp,
                0,
                false,          /* large_offset */
-               WINDOWS_LOCK,
                1,
                lck);
        if (subreq == NULL) {
@@ -6052,7 +6051,6 @@ void reply_lock(struct smb_request *req)
                fsp,
                0,
                false,          /* large_offset */
-               WINDOWS_LOCK,
                1,
                lck);
        if (subreq == NULL) {
@@ -8452,7 +8450,6 @@ void reply_lockingX(struct smb_request *req)
                fsp,
                lock_timeout,
                large_file_format,
-               WINDOWS_LOCK,
                num_locks,
                locks);
        if (subreq == NULL) {
index c7fa5cd0d36e65c8c72832fc5015b5e5f75d3e77..9b9f8ef8bd5bfa9442b9ce24b9e2ae8072fdfbe2 100644 (file)
@@ -7702,7 +7702,6 @@ static NTSTATUS smb_set_posix_lock(connection_struct *conn,
                fsp,
                blocking_lock ? UINT32_MAX : 0,
                true,           /* large_offset */
-               POSIX_LOCK,
                1,
                lck);
        if (subreq == NULL) {