The branch, master has been updated
       via  3bbc575 smbd: remove "id" from share_mode_entry
       via  f7e6571 smbd: Pass "file_id" explicitly to send_break_to_none
       via  1e2659e smbd: Pass "file_id" explicitly to send_break_message()
       via  9d7701c srvsvc: Avoid a dependency on share_mode_entry->id
       via  d9e5148 smbd: Avoid a dependency on share_mode_entry->id
       via  ddb1524 smbd: Avoid a dependency on share_mode_entry->id
       via  b7e29d0 smbd: Pass "file_id" explicitly to 
message_to_share_mode_entry()
       via  fc424b2 smbd: Pass "file_id" explicitly into 
share_mode_entry_to_message()
       via  5fdc62b smbd: Remove a redundant check
       via  bab8bf7 smbd: Use "share_mode_data->id", not "share_mode_entry->id"
       via  c1079e3 srvsvc: Use the passed-in file_id
       via  3434b32 smbd: Pass in "file_id" into validate_my_share_entries
       via  9487510 smbd: Pass in "file_id" into share_mode_str()
       via  786e307 srvsvc: Use the passed-in file id, not the one from 
share_mode_entry
       via  f519162 smbd: Pass "file_id" through share_entry_forall
       via  e6187be smbd: Fix a signed/unsigned hickup
      from  1e8ad19 winbindd: Initialize the domain groups member

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


- Log -----------------------------------------------------------------
commit 3bbc57564411b031bf3ce55652c9c899642da045
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 14:32:37 2018 +0100

    smbd: remove "id" from share_mode_entry
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Tue Feb 13 05:01:38 CET 2018 on sn-devel-144

commit f7e65719a4bc5fa2bede491d40a610b28f873c8a
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 12:28:13 2018 +0100

    smbd: Pass "file_id" explicitly to send_break_to_none
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 1e2659e96d4a309e76d1fc2a5a3dabb83a258127
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 12:24:35 2018 +0100

    smbd: Pass "file_id" explicitly to send_break_message()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 9d7701c923bce11c05c879ea3f7cdd2322e3d2bd
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 12:16:10 2018 +0100

    srvsvc: Avoid a dependency on share_mode_entry->id
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit d9e51484703e7ff510c534c603d30975d87c895c
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 12:11:10 2018 +0100

    smbd: Avoid a dependency on share_mode_entry->id
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit ddb1524669681bffc86090432f01a21621d11d2f
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:40:58 2018 +0100

    smbd: Avoid a dependency on share_mode_entry->id
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit b7e29d04c6156a6eb5c02b12e53abd1a04d75471
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:39:32 2018 +0100

    smbd: Pass "file_id" explicitly to message_to_share_mode_entry()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit fc424b28cd54f4ff5737417db1e1f8059cad80db
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:36:51 2018 +0100

    smbd: Pass "file_id" explicitly into share_mode_entry_to_message()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 5fdc62b2369b8463940629dc47c2768f0bcfc29d
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:14:31 2018 +0100

    smbd: Remove a redundant check
    
    The file ids in all share modes match the share_mode_data's one
    
    We don't have a paranoia check for this, but the share mode is per inode.
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit bab8bf7acb71bc54c258c29e7392927afb8b0709
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:13:40 2018 +0100

    smbd: Use "share_mode_data->id", not "share_mode_entry->id"
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit c1079e3d2a9dd10b11e6b7c9b9852518ea637bb5
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:10:14 2018 +0100

    srvsvc: Use the passed-in file_id
    
    The one in share_mode_entry will go
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 3434b32b88e656e767a0a1d2fa3988b2fb2311b0
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:09:10 2018 +0100

    smbd: Pass in "file_id" into validate_my_share_entries
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 9487510e9e1269e70d4c4fbc44316f0c8758be03
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 11:05:33 2018 +0100

    smbd: Pass in "file_id" into share_mode_str()
    
    This used to directly access share_entry->id, which will go
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 786e307fd433065c097915a9d98fc71b4afbab14
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 10:52:23 2018 +0100

    srvsvc: Use the passed-in file id, not the one from share_mode_entry
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit f51916265777189eafd7d8d73166fc52287f2878
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 10:43:11 2018 +0100

    smbd: Pass "file_id" through share_entry_forall
    
    It's also in the share_entry, but that is redundant and will go
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit e6187be11846239f1a0e6e76aa3812a52406989a
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Feb 7 10:05:57 2018 +0100

    smbd: Fix a signed/unsigned hickup
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

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

Summary of changes:
 source3/librpc/idl/open_files.idl         |  1 -
 source3/locking/locking.c                 | 14 ++++++-------
 source3/locking/proto.h                   |  5 ++++-
 source3/locking/share_mode_lock.c         |  3 +++
 source3/rpc_server/srvsvc/srv_srvsvc_nt.c | 15 ++++++++------
 source3/smbd/close.c                      |  7 ++++---
 source3/smbd/open.c                       | 29 +++++++++++++++------------
 source3/smbd/oplock.c                     | 33 +++++++++++++++++++++----------
 source3/smbd/proto.h                      | 12 +++++++----
 source3/smbd/smb2_setinfo.c               |  3 ++-
 source3/utils/status.c                    |  1 +
 11 files changed, 76 insertions(+), 47 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/librpc/idl/open_files.idl 
b/source3/librpc/idl/open_files.idl
index 1f85f24..8d652a9 100644
--- a/source3/librpc/idl/open_files.idl
+++ b/source3/librpc/idl/open_files.idl
@@ -51,7 +51,6 @@ interface open_files
                uint32          share_access;
                uint32          private_options;
                timeval         time;
-               file_id         id;
                udlong          share_file_id;
                uint32          uid;
                uint16          flags;
diff --git a/source3/locking/locking.c b/source3/locking/locking.c
index 4e9f1bb..791878c 100644
--- a/source3/locking/locking.c
+++ b/source3/locking/locking.c
@@ -425,7 +425,9 @@ void locking_close_file(struct messaging_context *msg_ctx,
  Print out a share mode.
 ********************************************************************/
 
-char *share_mode_str(TALLOC_CTX *ctx, int num, const struct share_mode_entry 
*e)
+char *share_mode_str(TALLOC_CTX *ctx, int num,
+                    const struct file_id *id,
+                    const struct share_mode_entry *e)
 {
        struct server_id_buf tmp;
 
@@ -439,7 +441,7 @@ char *share_mode_str(TALLOC_CTX *ctx, int num, const struct 
share_mode_entry *e)
                 e->access_mask, (unsigned long long)e->op_mid,
                 e->op_type, (unsigned long long)e->share_file_id,
                 (unsigned int)e->uid, (unsigned int)e->flags,
-                file_id_string_tos(&e->id),
+                file_id_string_tos(id),
                 (unsigned int)e->name_hash);
 }
 
@@ -720,7 +722,7 @@ static void remove_share_mode_lease(struct share_mode_data 
*d,
 
                status = leases_db_del(&client_guid,
                                        &lease_key,
-                                       &e->id);
+                                       &d->id);
 
                DEBUG(10, ("%s: leases_db_del returned %s\n", __func__,
                           nt_errstr(status)));
@@ -845,7 +847,6 @@ bool set_share_mode(struct share_mode_lock *lck, struct 
files_struct *fsp,
        e->lease = lease;
        e->time.tv_sec = fsp->open_time.tv_sec;
        e->time.tv_usec = fsp->open_time.tv_usec;
-       e->id = fsp->file_id;
        e->share_file_id = fsp->fh->gen_id;
        e->uid = (uint32_t)uid;
        e->flags = (fsp->posix_flags & FSP_POSIX_FLAGS_OPEN) ?
@@ -860,7 +861,7 @@ struct share_mode_entry *find_share_mode_entry(
 {
        struct share_mode_data *d = lck->data;
        struct server_id pid;
-       int i;
+       uint32_t i;
 
        pid = messaging_server_id(fsp->conn->sconn->msg_ctx);
 
@@ -873,9 +874,6 @@ struct share_mode_entry *find_share_mode_entry(
                if (!serverid_equal(&pid, &e->pid)) {
                        continue;
                }
-               if (!file_id_equal(&fsp->file_id, &e->id)) {
-                       continue;
-               }
                if (fsp->fh->gen_id != e->share_file_id) {
                        continue;
                }
diff --git a/source3/locking/proto.h b/source3/locking/proto.h
index 33184e0..afd5373 100644
--- a/source3/locking/proto.h
+++ b/source3/locking/proto.h
@@ -140,7 +140,9 @@ void locking_close_file(struct messaging_context *msg_ctx,
 bool locking_init(void);
 bool locking_init_readonly(void);
 bool locking_end(void);
-char *share_mode_str(TALLOC_CTX *ctx, int num, const struct share_mode_entry 
*e);
+char *share_mode_str(TALLOC_CTX *ctx, int num,
+                    const struct file_id *id,
+                    const struct share_mode_entry *e);
 struct share_mode_lock *get_existing_share_mode_lock(TALLOC_CTX *mem_ctx,
                                                     struct file_id id);
 struct share_mode_lock *get_share_mode_lock(
@@ -210,6 +212,7 @@ int share_mode_forall(int (*fn)(struct file_id fid,
                                void *private_data),
                      void *private_data);
 int share_entry_forall(int (*fn)(const struct share_mode_entry *,
+                                const struct file_id *id,
                                 const char *, const char *,
                                 const char *, void *),
                      void *private_data);
diff --git a/source3/locking/share_mode_lock.c 
b/source3/locking/share_mode_lock.c
index cee0045..fce0c33 100644
--- a/source3/locking/share_mode_lock.c
+++ b/source3/locking/share_mode_lock.c
@@ -879,6 +879,7 @@ int share_mode_forall(int (*fn)(struct file_id fid,
 
 struct share_entry_forall_state {
        int (*fn)(const struct share_mode_entry *e,
+                 const struct file_id *id,
                  const char *service_path,
                  const char *base_name,
                  const char *stream_name,
@@ -897,6 +898,7 @@ static int share_entry_traverse_fn(struct file_id fid,
                int ret;
 
                ret = state->fn(&data->share_modes[i],
+                               &data->id,
                                data->servicepath,
                                data->base_name,
                                data->stream_name,
@@ -915,6 +917,7 @@ static int share_entry_traverse_fn(struct file_id fid,
 ********************************************************************/
 
 int share_entry_forall(int (*fn)(const struct share_mode_entry *,
+                                const struct file_id *id,
                                 const char *, const char *,
                                 const char *, void *),
                       void *private_data)
diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c 
b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
index 2ff8e64..6536e3d 100644
--- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
+++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
@@ -82,6 +82,7 @@ struct share_conn_stat {
 ********************************************************************/
 
 static int enum_file_fn(const struct share_mode_entry *e,
+                       const struct file_id *id,
                        const char *sharepath,
                        const char *fname,
                        const char *sname,
@@ -123,7 +124,7 @@ static int enum_file_fn(const struct share_mode_entry *e,
        /* need to count the number of locks on a file */
 
        ZERO_STRUCT( fsp );
-       fsp.file_id = e->id;
+       fsp.file_id = *id;
 
        if ( (brl = brl_get_locks(talloc_tos(), &fsp)) != NULL ) {
                num_locks = brl_num_locks(brl);
@@ -173,7 +174,7 @@ static WERROR net_enum_files(TALLOC_CTX *ctx,
        f_enum_cnt.username = username;
        f_enum_cnt.ctr3 = *ctr3;
 
-       share_entry_forall( enum_file_fn, (void *)&f_enum_cnt );
+       share_entry_forall(enum_file_fn, (void *)&f_enum_cnt );
 
        *ctr3 = f_enum_cnt.ctr3;
 
@@ -841,6 +842,7 @@ static WERROR init_srv_sess_info_0(struct pipes_struct *p,
  **********************************************************************/
 
 static int count_sess_files_fn(const struct share_mode_entry *e,
+                              const struct file_id *id,
                               const char *sharepath,
                               const char *fname,
                               const char *sname,
@@ -968,6 +970,7 @@ static WERROR init_srv_sess_info_1(struct pipes_struct *p,
  ********************************************************************/
 
 static int share_file_fn(const struct share_mode_entry *e,
+                        const struct file_id *id,
                         const char *sharepath,
                         const char *fname,
                         const char *sname,
@@ -2699,6 +2702,7 @@ struct enum_file_close_state {
 };
 
 static int enum_file_close_fn(const struct share_mode_entry *e,
+                             const struct file_id *id,
                              const char *sharepath,
                              const char *fname,
                              const char *sname,
@@ -2718,11 +2722,10 @@ static int enum_file_close_fn(const struct 
share_mode_entry *e,
        }
 
        /* Ok - send the close message. */
-       DEBUG(10,("enum_file_close_fn: request to close file %s, %s\n",
-               sharepath,
-               share_mode_str(talloc_tos(), 0, e) ));
+       DBG_DEBUG("request to close file %s, %s\n", sharepath,
+                 share_mode_str(talloc_tos(), 0, id, e));
 
-       share_mode_entry_to_message(msg, e);
+       share_mode_entry_to_message(msg, id, e);
 
        state->r->out.result = ntstatus_to_werror(
                messaging_send_buf(state->msg_ctx,
diff --git a/source3/smbd/close.c b/source3/smbd/close.c
index 2f6cc4f..3324d3e 100644
--- a/source3/smbd/close.c
+++ b/source3/smbd/close.c
@@ -1280,15 +1280,16 @@ void msg_close_file(struct messaging_context *msg_ctx,
                        DATA_BLOB *data)
 {
        files_struct *fsp = NULL;
+       struct file_id id;
        struct share_mode_entry e;
        struct smbd_server_connection *sconn =
                talloc_get_type_abort(private_data,
                struct smbd_server_connection);
 
-       message_to_share_mode_entry(&e, (char *)data->data);
+       message_to_share_mode_entry(&id, &e, (char *)data->data);
 
        if(DEBUGLVL(10)) {
-               char *sm_str = share_mode_str(NULL, 0, &e);
+               char *sm_str = share_mode_str(NULL, 0, &id, &e);
                if (!sm_str) {
                        smb_panic("talloc failed");
                }
@@ -1297,7 +1298,7 @@ void msg_close_file(struct messaging_context *msg_ctx,
                TALLOC_FREE(sm_str);
        }
 
-       fsp = file_find_dif(sconn, e.id, e.share_file_id);
+       fsp = file_find_dif(sconn, id, e.share_file_id);
        if (!fsp) {
                DEBUG(10,("msg_close_file: failed to find file.\n"));
                return;
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 5817bdb..be9e601 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1544,6 +1544,7 @@ sa = 0x%x, share = 0x%x\n", (num), (unsigned int)(am), 
(unsigned int)(right), (u
 
 #if defined(DEVELOPER)
 static void validate_my_share_entries(struct smbd_server_connection *sconn,
+                                     const struct file_id id,
                                      int num,
                                      struct share_mode_entry *share_entry)
 {
@@ -1563,11 +1564,11 @@ static void validate_my_share_entries(struct 
smbd_server_connection *sconn,
                return;
        }
 
-       fsp = file_find_dif(sconn, share_entry->id,
-                           share_entry->share_file_id);
+       fsp = file_find_dif(sconn, id, share_entry->share_file_id);
        if (!fsp) {
-               DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-                        share_mode_str(talloc_tos(), num, share_entry) ));
+               DBG_ERR("PANIC : %s\n",
+                       share_mode_str(talloc_tos(), num, &id,
+                                      share_entry));
                smb_panic("validate_my_share_entries: Cannot match a "
                          "share entry with an open file\n");
        }
@@ -1581,8 +1582,9 @@ static void validate_my_share_entries(struct 
smbd_server_connection *sconn,
  panic:
        {
                char *str;
-               DEBUG(0,("validate_my_share_entries: PANIC : %s\n",
-                        share_mode_str(talloc_tos(), num, share_entry) ));
+               DBG_ERR("validate_my_share_entries: PANIC : %s\n",
+                       share_mode_str(talloc_tos(), num, &id,
+                                      share_entry));
                str = talloc_asprintf(talloc_tos(),
                        "validate_my_share_entries: "
                        "file %s, oplock_type = 0x%x, op_type = 0x%x\n",
@@ -1654,7 +1656,7 @@ static NTSTATUS open_mode_check(connection_struct *conn,
 
 #if defined(DEVELOPER)
        for(i = 0; i < lck->data->num_share_modes; i++) {
-               validate_my_share_entries(conn->sconn, i,
+               validate_my_share_entries(conn->sconn, lck->data->id, i,
                                          &lck->data->share_modes[i]);
        }
 #endif
@@ -1688,8 +1690,9 @@ static NTSTATUS open_mode_check(connection_struct *conn,
  */
 
 NTSTATUS send_break_message(struct messaging_context *msg_ctx,
-                                  const struct share_mode_entry *exclusive,
-                                  uint16_t break_to)
+                           const struct file_id *id,
+                           const struct share_mode_entry *exclusive,
+                           uint16_t break_to)
 {
        NTSTATUS status;
        char msg[MSG_SMB_SHARE_MODE_ENTRY_SIZE];
@@ -1699,7 +1702,7 @@ NTSTATUS send_break_message(struct messaging_context 
*msg_ctx,
                   server_id_str_buf(exclusive->pid, &tmp)));
 
        /* Create the message. */
-       share_mode_entry_to_message(msg, exclusive);
+       share_mode_entry_to_message(msg, id, exclusive);
 
        /* Overload entry->op_type */
        /*
@@ -1925,8 +1928,8 @@ static bool delay_for_oplock(files_struct *fsp,
 
                DEBUG(10, ("breaking from %d to %d\n",
                           (int)e_lease_type, (int)break_to));
-               send_break_message(fsp->conn->sconn->msg_ctx, e,
-                                  break_to);
+               send_break_message(fsp->conn->sconn->msg_ctx, &fsp->file_id,
+                                  e, break_to);
                if (e_lease_type & delay_mask) {
                        delay = true;
                }
@@ -4981,7 +4984,7 @@ static NTSTATUS lease_match(connection_struct *conn,
                                continue;
                        }
 
-                       send_break_message(conn->sconn->msg_ctx, e,
+                       send_break_message(conn->sconn->msg_ctx, &d->id, e,
                                           SMB2_LEASE_NONE);
 
                        /*
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index e848b5e..0f95bb0 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -792,6 +792,7 @@ static void process_oplock_break_message(struct 
messaging_context *msg_ctx,
                                         struct server_id src,
                                         DATA_BLOB *data)
 {
+       struct file_id id;
        struct share_mode_entry msg;
        files_struct *fsp;
        bool use_kernel;
@@ -816,15 +817,15 @@ static void process_oplock_break_message(struct 
messaging_context *msg_ctx,
        }
 
        /* De-linearize incoming message. */
-       message_to_share_mode_entry(&msg, (char *)data->data);
+       message_to_share_mode_entry(&id, &msg, (char *)data->data);
        break_to = msg.op_type;
 
        DEBUG(10, ("Got oplock break to %u message from pid %s: %s/%llu\n",
                   (unsigned)break_to, server_id_str_buf(src, &tmp),
-                  file_id_string_tos(&msg.id),
+                  file_id_string_tos(&id),
                   (unsigned long long)msg.share_file_id));
 
-       fsp = initial_break_processing(sconn, msg.id, msg.share_file_id);
+       fsp = initial_break_processing(sconn, id, msg.share_file_id);
 
        if (fsp == NULL) {
                /* We hit a race here. Break messages are sent, and before we
@@ -1130,11 +1131,12 @@ static void 
contend_level2_oplocks_begin_default(files_struct *fsp,
 }
 
 static void send_break_to_none(struct messaging_context *msg_ctx,
+                              const struct file_id *id,
                               const struct share_mode_entry *e)
 {
        char msg[MSG_SMB_SHARE_MODE_ENTRY_SIZE];
 
-       share_mode_entry_to_message(msg, e);
+       share_mode_entry_to_message(msg, id, e);
        /* Overload entry->op_type */
        SSVAL(msg, OP_BREAK_MSG_OP_TYPE_OFFSET, NO_OPLOCK);
 
@@ -1202,7 +1204,7 @@ static void do_break_to_none(struct tevent_context *ctx,
                DEBUG(10, ("Breaking lease# %"PRIu32" with share_entry# "
                           "%"PRIu32"\n", i, j));
 
-               send_break_to_none(state->sconn->msg_ctx, e);
+               send_break_to_none(state->sconn->msg_ctx, &state->id, e);
        }
 
        for(i = 0; i < d->num_share_modes; i++) {
@@ -1245,7 +1247,7 @@ static void do_break_to_none(struct tevent_context *ctx,
                        abort();
                }
 
-               send_break_to_none(state->sconn->msg_ctx, e);
+               send_break_to_none(state->sconn->msg_ctx, &state->id, e);
        }
 
        /* We let the message receivers handle removing the oplock state
@@ -1291,7 +1293,8 @@ void smbd_contend_level2_oplocks_end(files_struct *fsp,
  Linearize a share mode entry struct to an internal oplock break message.
 ****************************************************************************/
 
-void share_mode_entry_to_message(char *msg, const struct share_mode_entry *e)
+void share_mode_entry_to_message(char *msg, const struct file_id *id,
+                                const struct share_mode_entry *e)
 {
        SIVAL(msg,OP_BREAK_MSG_PID_OFFSET,(uint32_t)e->pid.pid);
        SBVAL(msg,OP_BREAK_MSG_MID_OFFSET,e->op_mid);
@@ -1301,7 +1304,11 @@ void share_mode_entry_to_message(char *msg, const struct 
share_mode_entry *e)
        SIVAL(msg,OP_BREAK_MSG_PRIV_OFFSET,e->private_options);
        SIVAL(msg,OP_BREAK_MSG_TIME_SEC_OFFSET,(uint32_t)e->time.tv_sec);
        SIVAL(msg,OP_BREAK_MSG_TIME_USEC_OFFSET,(uint32_t)e->time.tv_usec);
-       push_file_id_24(msg+OP_BREAK_MSG_DEV_OFFSET, &e->id);
+       /*
+        * "id" used to be part of share_mode_entry, thus the strange
+        * place to put this. Feel free to move somewhere else :-)
+        */
+       push_file_id_24(msg+OP_BREAK_MSG_DEV_OFFSET, id);
        SIVAL(msg,OP_BREAK_MSG_FILE_ID_OFFSET,e->share_file_id);
        SIVAL(msg,OP_BREAK_MSG_UID_OFFSET,e->uid);
        SSVAL(msg,OP_BREAK_MSG_FLAGS_OFFSET,e->flags);
@@ -1313,7 +1320,9 @@ void share_mode_entry_to_message(char *msg, const struct 
share_mode_entry *e)
  De-linearize an internal oplock break message to a share mode entry struct.
 ****************************************************************************/
 
-void message_to_share_mode_entry(struct share_mode_entry *e, const char *msg)
+void message_to_share_mode_entry(struct file_id *id,
+                                struct share_mode_entry *e,
+                                const char *msg)
 {
        e->pid.pid = (pid_t)IVAL(msg,OP_BREAK_MSG_PID_OFFSET);
        e->op_mid = BVAL(msg,OP_BREAK_MSG_MID_OFFSET);
@@ -1323,7 +1332,11 @@ void message_to_share_mode_entry(struct share_mode_entry 
*e, const char *msg)
        e->private_options = IVAL(msg,OP_BREAK_MSG_PRIV_OFFSET);
        e->time.tv_sec = (time_t)IVAL(msg,OP_BREAK_MSG_TIME_SEC_OFFSET);
        e->time.tv_usec = (int)IVAL(msg,OP_BREAK_MSG_TIME_USEC_OFFSET);
-       pull_file_id_24(msg+OP_BREAK_MSG_DEV_OFFSET, &e->id);
+       /*
+        * "id" used to be part of share_mode_entry, thus the strange
+        * place to put this. Feel free to move somewhere else :-)
+        */
+       pull_file_id_24(msg+OP_BREAK_MSG_DEV_OFFSET, id);
        e->share_file_id = (unsigned long)IVAL(msg,OP_BREAK_MSG_FILE_ID_OFFSET);
        e->uid = (uint32_t)IVAL(msg,OP_BREAK_MSG_UID_OFFSET);
        e->flags = (uint16_t)SVAL(msg,OP_BREAK_MSG_FLAGS_OFFSET);
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index fe37640..4417595 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -651,8 +651,9 @@ void change_file_owner_to_parent(connection_struct *conn,
                                 files_struct *fsp);
 bool is_stat_open(uint32_t access_mask);
 NTSTATUS send_break_message(struct messaging_context *msg_ctx,
-                               const struct share_mode_entry *exclusive,
-                               uint16_t break_to);
+                           const struct file_id *id,
+                           const struct share_mode_entry *exclusive,
+                           uint16_t break_to);
 struct deferred_open_record;
 bool is_deferred_open_async(const struct deferred_open_record *rec);
 NTSTATUS create_directory(connection_struct *conn, struct smb_request *req,
@@ -722,8 +723,11 @@ void smbd_contend_level2_oplocks_begin(files_struct *fsp,
                                  enum level2_contention_type type);
 void smbd_contend_level2_oplocks_end(files_struct *fsp,
                                enum level2_contention_type type);
-void share_mode_entry_to_message(char *msg, const struct share_mode_entry *e);
-void message_to_share_mode_entry(struct share_mode_entry *e, const char *msg);
+void share_mode_entry_to_message(char *msg, const struct file_id *id,
+                                const struct share_mode_entry *e);
+void message_to_share_mode_entry(struct file_id *id,
+                                struct share_mode_entry *e,
+                                const char *msg);
 bool init_oplocks(struct smbd_server_connection *sconn);
 void init_kernel_oplocks(struct smbd_server_connection *sconn);
 
diff --git a/source3/smbd/smb2_setinfo.c b/source3/smbd/smb2_setinfo.c
index 0355095..996e4f2 100644
--- a/source3/smbd/smb2_setinfo.c
+++ b/source3/smbd/smb2_setinfo.c
@@ -226,7 +226,8 @@ static struct tevent_req 
*delay_rename_for_lease_break(struct tevent_req *req,
                delay = true;
                break_to = (e_lease_type & ~SMB2_LEASE_HANDLE);
 
-               send_break_message(fsp->conn->sconn->msg_ctx, e, break_to);
+               send_break_message(fsp->conn->sconn->msg_ctx, &fsp->file_id,
+                                  e, break_to);
        }
 
        if (!delay) {
diff --git a/source3/utils/status.c b/source3/utils/status.c
index dfb1d92..beae85c 100644
--- a/source3/utils/status.c
+++ b/source3/utils/status.c
@@ -117,6 +117,7 @@ static bool Ucrit_addPid( struct server_id pid )
 }
 
 static int print_share_mode(const struct share_mode_entry *e,
+                           const struct file_id *id,
                            const char *sharepath,
                            const char *fname,
                            const char *sname,


-- 
Samba Shared Repository

Reply via email to