The branch, v4-17-stable has been updated via c15dfcca9f5 VERSION: Disable GIT_SNAPSHOT for the 4.17.0rc3 release. via d9f7e8d41b7 WHATSNEW: Add release notes for Samba 4.17.0rc3. via 4d37152c666 smbd: directly pass fsp to SMB_VFS_FGETXATTR() in fget_ea_dos_attribute() via 25d6dcd8897 smbd: add and use vfs_fget_dos_attributes() via 9df07ee0fa5 smbtorture: add test smb2.stream.attributes2 via 81be412fb01 smbtorture: rename smb2.streams.attributes to smb2.streams.attributes1 via 0d0eff66058 vfs_default: assert all passed in fsp's and names are non-stream type via f2272106f36 vfs_streams_xattr: restrict which fcntl's are allowed on streams via aca819549c3 smbd: skip access checks for stat-opens on streams in open_file() via 7c713f386f3 smbd: use metadata_fsp() in get_acl_group_bits() via 107af8fd98b smbd: ignore request to set the SPARSE attribute on streams via 69742bab667 smbd: use metadata_fsp() with SMB_VFS_FSET_DOS_ATTRIBUTES() via 814fd4e8e89 smbd: use metadata_fsp() with SMB_VFS_FGET_DOS_ATTRIBUTES() via 1434b66f2a1 smbd: use metadata_fsp() with SMB_VFS_FSET_NT_ACL() via ba468a9b416 smbd: use metadata_fsp() with SMB_VFS_FGET_NT_ACL() via ab76ab52c39 CI: add a test trying to delete a stream on a pathref ("stat open") handle via 3994f71f039 vfs_xattr_tdb: add "xattr_tdb:ignore_user_xattr" option via aa85dac1e95 vfs_xattr_tdb: add a module config via bae285ed702 vfs_xattr_tdb: move close_xattr_db() via f23ef830bc7 smdb: use fsp_is_alternate_stream() in open_file() via 721ea813b54 waf: Fix SO version number of libsamba-errors via fbcb8db069c WHATSNEW: document new volume serial number smb.conf parameter via 0b15ebced78 s3:smbd: let delay_for_oplock_fn() only call leases_db_get() once via cb63afbda1b s3:smbd: lease_match_break_fn() only needs leases_db_get() once via e764e40ad55 s3:smbd: inline fsp_lease_type_is_exclusive() logic into contend_level2_oplocks_begin_default via fa8d19056bd s3:locking: move get_existing_share_mode_lock() to share_mode_lock.[ch] via 411af5fb48c s3:locking: pass lease_key explicitly to set_share_mode() via 6bf37ba4538 s3:smbd: only run validate_oplock_types() with smbd:validate_oplock_types = yes via f207ef33224 s3:g_lock: avoid useless talloc_array(0) in g_lock_dump() via e4538e70cbe s3:g_lock: add some const to the shared array passed via g_lock_dump*() via 208037a7eea lib/util: add unlikely() to SMB_ASSERT() via 76bff90824a s3: smbd: Plumb close_type parameter through close_file_in_loop(), file_close_conn() via 91273a969ab s3: smbd: Add "enum file_close_type close_type" parameter to file_close_conn(). via 5fc9bf0f63c s3: smbd: Add "enum file_close_type close_type" parameter to close_cnum(). via c47b7479e74 s3/smbd: Use after free when iterating smbd_server_connection->connections via 0b33961e71a s3/smbd: Use after free when iterating smbd_server_connection->connections via 0725e1ea851 s3:utils remove documentation of -l as alias for --long via c4c99397c56 s3:smbd: only clear LEASE_READ if there's no read lease is left via 0529214b3cc s4:torture/smb2: add smb2.lease.v[1,2]_bug_15148 via 6ac28f43868 s3:smbd: share_mode_flags_set() takes SMB2_LEASE_* values via e3ee5197a6d libcli/smb: Set error status if 'iov' pointer is NULL via dee2505716d libcli/smb: Ensure we call tevent_req_nterror() on failure via 877287e6b4e VERSION: Bump version up to Samba 4.17.0rc3... from 8e1f74303ee VERSION: Disable GIT_SNAPSHOT for the 4.17.0rc2 release.
https://git.samba.org/?p=samba.git;a=shortlog;h=v4-17-stable - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: VERSION | 2 +- WHATSNEW.txt | 29 ++- docs-xml/manpages/net.8.xml | 14 +- lib/util/fault.h | 2 +- libcli/smb/smbXcli_base.c | 12 +- libcli/util/wscript_build | 2 +- selftest/knownfail | 4 +- selftest/target/Samba3.pm | 8 + selftest/target/Samba4.pm | 1 + source3/include/g_lock.h | 4 +- source3/include/proto.h | 3 + source3/lib/g_lock.c | 20 +- source3/locking/leases_util.c | 17 -- source3/locking/locking.c | 11 - source3/locking/proto.h | 3 - source3/locking/share_mode_lock.c | 30 ++- source3/locking/share_mode_lock.h | 4 + source3/modules/vfs_default.c | 92 +++++--- source3/modules/vfs_streams_xattr.c | 33 +++ source3/modules/vfs_xattr_tdb.c | 293 ++++++++++++++--------- source3/rpc_server/srvsvc/srv_srvsvc_nt.c | 2 +- source3/script/tests/test_delete_stream.sh | 123 ++++++++++ source3/selftest/tests.py | 1 + source3/smbd/conn.c | 36 ++- source3/smbd/dir.c | 2 +- source3/smbd/dosmode.c | 24 +- source3/smbd/file_access.c | 2 +- source3/smbd/files.c | 17 +- source3/smbd/open.c | 97 +++++--- source3/smbd/posix_acls.c | 2 +- source3/smbd/proto.h | 6 +- source3/smbd/pysmbd.c | 4 +- source3/smbd/server.c | 2 +- source3/smbd/smb2_oplock.c | 16 +- source3/smbd/smb2_service.c | 6 +- source3/smbd/smbXsrv_tcon.c | 11 +- source3/smbd/smbd.h | 1 + source3/smbd/vfs.c | 39 ++++ source3/torture/cmd_vfs.c | 12 +- source3/torture/test_g_lock.c | 12 +- source3/utils/net_g_lock.c | 2 +- source3/utils/net_usershare.c | 16 +- source4/torture/smb2/lease.c | 208 +++++++++++++++++ source4/torture/smb2/streams.c | 361 ++++++++++++++++++++++++++++- 44 files changed, 1284 insertions(+), 302 deletions(-) create mode 100755 source3/script/tests/test_delete_stream.sh Changeset truncated at 500 lines: diff --git a/VERSION b/VERSION index 47a2a58ee76..beafce89da7 100644 --- a/VERSION +++ b/VERSION @@ -87,7 +87,7 @@ SAMBA_VERSION_PRE_RELEASE= # e.g. SAMBA_VERSION_RC_RELEASE=1 # # -> "3.0.0rc1" # ######################################################## -SAMBA_VERSION_RC_RELEASE=2 +SAMBA_VERSION_RC_RELEASE=3 ######################################################## # To mark SVN snapshots this should be set to 'yes' # diff --git a/WHATSNEW.txt b/WHATSNEW.txt index 988c4c66ed8..63c5fe09a90 100644 --- a/WHATSNEW.txt +++ b/WHATSNEW.txt @@ -1,7 +1,7 @@ Release Announcements ===================== -This is the second release candidate of Samba 4.17. This is *not* +This is the third release candidate of Samba 4.17. This is *not* intended for production environments and is designed for testing purposes only. Please report any defects via the Samba bug reporting system at https://bugzilla.samba.org/. @@ -204,6 +204,33 @@ smb.conf changes -------------- ----------- ------- dns port New default 53 nt hash store New parameter always + volume serial number New parameter -1 + +CHANGES SINCE 4.17.0rc2 +======================= + +o Jeremy Allison <j...@samba.org> + * BUG 15128: Possible use after free of connection_struct when iterating + smbd_server_connection->connections. + +o Christian Ambach <a...@samba.org> + * BUG 15145: `net usershare add` fails with flag works with --long but fails + with -l. + +o Ralph Boehme <s...@samba.org> + * BUG 15126: acl_xattr VFS module may unintentionally use filesystem + permissions instead of ACL from xattr. + +o Stefan Metzmacher <me...@samba.org> + * BUG 15125: Performance regression on contended path based operations. + * BUG 15148: Missing READ_LEASE break could cause data corruption. + +o Andreas Schneider <a...@samba.org> + * BUG 15141: libsamba-errors uses a wrong version number. + +o Joseph Sutton <josephsut...@catalyst.net.nz> + * BUG 15152: SMB1 negotiation can fail to handle connection errors. + CHANGES SINCE 4.17.0rc1 ======================= diff --git a/docs-xml/manpages/net.8.xml b/docs-xml/manpages/net.8.xml index 557cf0d0883..497a8114057 100644 --- a/docs-xml/manpages/net.8.xml +++ b/docs-xml/manpages/net.8.xml @@ -118,7 +118,7 @@ </varlistentry> <varlistentry> - <term>-l|--long</term> + <term>--long</term> <listitem><para> When listing data, give more information on each item. </para></listitem> @@ -2139,8 +2139,8 @@ can create user defined shares on demand using the commands below. <simplelist> <member>net usershare add sharename path [comment [acl] [guest_ok=[y|n]]] - to add or change a user defined share.</member> <member>net usershare delete sharename - to delete a user defined share.</member> -<member>net usershare info [-l|--long] [wildcard sharename] - to print info about a user defined share.</member> -<member>net usershare list [-l|--long] [wildcard sharename] - to list user defined shares.</member> +<member>net usershare info [--long] [wildcard sharename] - to print info about a user defined share.</member> +<member>net usershare list [--long] [wildcard sharename] - to list user defined shares.</member> </simplelist> </para> @@ -2209,7 +2209,7 @@ any users currently connected to the deleted share. </refsect3> <refsect3> -<title>USERSHARE INFO <replaceable>[-l|--long]</replaceable> <replaceable>[wildcard sharename]</replaceable></title> +<title>USERSHARE INFO <replaceable>[--long]</replaceable> <replaceable>[wildcard sharename]</replaceable></title> <para> Get info on user defined shares owned by the current user matching the given pattern, or all users. @@ -2219,7 +2219,7 @@ Get info on user defined shares owned by the current user matching the given pat net usershare info on its own dumps out info on the user defined shares that were created by the current user, or restricts them to share names that match the given wildcard pattern ('*' matches one or more characters, '?' matches only one character). -If the '-l' or '--long' option is also given, it prints out info on user defined +If the '--long' option is also given, it prints out info on user defined shares created by other users. </para> @@ -2239,7 +2239,7 @@ modified by the "net usershare add" command. </refsect3> <refsect3> -<title>USERSHARE LIST <replaceable>[-l|--long]</replaceable> <replaceable>wildcard sharename</replaceable></title> +<title>USERSHARE LIST <replaceable>[--long]</replaceable> <replaceable>wildcard sharename</replaceable></title> <para> List all the user defined shares owned by the current user matching the given pattern, or all users. @@ -2249,7 +2249,7 @@ List all the user defined shares owned by the current user matching the given pa net usershare list on its own list out the names of the user defined shares that were created by the current user, or restricts the list to share names that match the given wildcard pattern ('*' matches one or more characters, '?' matches only one character). -If the '-l' or '--long' option is also given, it includes the names of user defined +If the '--long' option is also given, it includes the names of user defined shares created by other users. </para> diff --git a/lib/util/fault.h b/lib/util/fault.h index f3b1666a172..6aceaf6dabc 100644 --- a/lib/util/fault.h +++ b/lib/util/fault.h @@ -33,7 +33,7 @@ #ifdef _SAMBA_DEBUG_H #define SMB_ASSERT(b) \ do { \ - if (!(b)) { \ + if (unlikely(!(b))) { \ DEBUG(0,("PANIC: assert failed at %s(%d): %s\n", \ __FILE__, __LINE__, #b)); \ smb_panic("assert failed: " #b); \ diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index d2f55966c3a..c5d13bd5837 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -4469,7 +4469,11 @@ static void smbXcli_negprot_smb1_done(struct tevent_req *subreq) NULL, /* pinbuf */ expected, ARRAY_SIZE(expected)); TALLOC_FREE(subreq); - if (inhdr == NULL || tevent_req_nterror(req, status)) { + if (tevent_req_nterror(req, status)) { + return; + } + if (inhdr == NULL) { + tevent_req_nterror(req, NT_STATUS_INTERNAL_ERROR); return; } @@ -5009,7 +5013,11 @@ static void smbXcli_negprot_smb2_done(struct tevent_req *subreq) status = smb2cli_req_recv(subreq, state, &iov, expected, ARRAY_SIZE(expected)); - if (tevent_req_nterror(req, status) || iov == NULL) { + if (tevent_req_nterror(req, status)) { + return; + } + if (iov == NULL) { + tevent_req_nterror(req, NT_STATUS_INTERNAL_ERROR); return; } diff --git a/libcli/util/wscript_build b/libcli/util/wscript_build index 9c8fddca94b..4267cfeb57e 100644 --- a/libcli/util/wscript_build +++ b/libcli/util/wscript_build @@ -10,7 +10,7 @@ bld.SAMBA_LIBRARY('samba-errors', deps='gnutls', # private_library=True, pc_files=[], - vnum='1', + vnum='1.0.0', ) bld.SAMBA_GENERATOR('ntstatus_generated', diff --git a/selftest/knownfail b/selftest/knownfail index 173286a96a0..0b4c5a44a7f 100644 --- a/selftest/knownfail +++ b/selftest/knownfail @@ -207,10 +207,10 @@ ^samba3.smb2.oplock.stream1 ^samba3.smb2.streams.rename ^samba3.smb2.streams.rename2 -^samba3.smb2.streams.attributes +^samba3.smb2.streams.attributes1\(.*\) ^samba3.smb2.streams streams_xattr.rename\(nt4_dc\) ^samba3.smb2.streams streams_xattr.rename2\(nt4_dc\) -^samba3.smb2.streams streams_xattr.attributes\(nt4_dc\) +^samba3.smb2.streams streams_xattr.attributes1\(nt4_dc\) ^samba3.smb2.getinfo.complex ^samba3.smb2.getinfo.fsinfo # quotas don't work yet ^samba3.smb2.setinfo.setinfo diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index b12011a71fa..d413f14bacd 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -2772,6 +2772,7 @@ sub provision($$) panic action = cd $self->{srcdir} && $self->{srcdir}/selftest/gdb_backtrace %d %\$(MAKE_TEST_BINARY) smbd:suicide mode = yes smbd:FSCTL_SMBTORTURE = yes + smbd:validate_oplock_types = yes client min protocol = SMB2_02 server min protocol = SMB2_02 @@ -3372,6 +3373,13 @@ sub provision($$) copy = tmp vfs objects = streams_xattr xattr_tdb +[acl_streams_xattr] + copy = tmp + vfs objects = acl_xattr streams_xattr fake_acls xattr_tdb + acl_xattr:ignore system acls = yes + acl_xattr:security_acl_name = user.acl + xattr_tdb:ignore_user_xattr = yes + [compound_find] copy = tmp smbd:find async delay usec = 10000 diff --git a/selftest/target/Samba4.pm b/selftest/target/Samba4.pm index 1762ae4ae79..e5ae57cb7fc 100755 --- a/selftest/target/Samba4.pm +++ b/selftest/target/Samba4.pm @@ -778,6 +778,7 @@ sub provision_raw_step1($$) panic action = $RealBin/gdb_backtrace \%d smbd:suicide mode = yes smbd:FSCTL_SMBTORTURE = yes + smbd:validate_oplock_types = yes wins support = yes server role = $ctx->{server_role} server services = +echo $services diff --git a/source3/include/g_lock.h b/source3/include/g_lock.h index 3a94879d209..749cb57ed45 100644 --- a/source3/include/g_lock.h +++ b/source3/include/g_lock.h @@ -71,7 +71,7 @@ struct tevent_req *g_lock_dump_send( TDB_DATA key, void (*fn)(struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data), @@ -81,7 +81,7 @@ NTSTATUS g_lock_dump(struct g_lock_ctx *ctx, TDB_DATA key, void (*fn)(struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data), diff --git a/source3/include/proto.h b/source3/include/proto.h index 6a6edc36dfb..f632cf37c08 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -82,6 +82,9 @@ NTSTATUS vfs_at_fspcwd(TALLOC_CTX *mem_ctx, struct connection_struct *conn, struct files_struct **_fsp); +NTSTATUS vfs_fget_dos_attributes(struct files_struct *fsp, + uint32_t *dosmode); + #include "source3/lib/interface.h" /* The following definitions come from lib/ldap_debug_handler.c */ diff --git a/source3/lib/g_lock.c b/source3/lib/g_lock.c index d683c4ddee6..8a07949b3d9 100644 --- a/source3/lib/g_lock.c +++ b/source3/lib/g_lock.c @@ -1210,7 +1210,7 @@ struct g_lock_dump_state { TDB_DATA key; void (*fn)(struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data); @@ -1238,12 +1238,14 @@ static void g_lock_dump_fn(TDB_DATA key, TDB_DATA data, return; } - shared = talloc_array( - state->mem_ctx, struct server_id, lck.num_shared); - if (shared == NULL) { - DBG_DEBUG("talloc failed\n"); - state->status = NT_STATUS_NO_MEMORY; - return; + if (lck.num_shared > 0) { + shared = talloc_array( + state->mem_ctx, struct server_id, lck.num_shared); + if (shared == NULL) { + DBG_DEBUG("talloc failed\n"); + state->status = NT_STATUS_NO_MEMORY; + return; + } } for (i=0; i<lck.num_shared; i++) { @@ -1265,7 +1267,7 @@ static void g_lock_dump_fn(TDB_DATA key, TDB_DATA data, NTSTATUS g_lock_dump(struct g_lock_ctx *ctx, TDB_DATA key, void (*fn)(struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data), @@ -1300,7 +1302,7 @@ struct tevent_req *g_lock_dump_send( TDB_DATA key, void (*fn)(struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data), diff --git a/source3/locking/leases_util.c b/source3/locking/leases_util.c index cb62bffbd7d..9ae4081cd7b 100644 --- a/source3/locking/leases_util.c +++ b/source3/locking/leases_util.c @@ -71,23 +71,6 @@ uint32_t fsp_lease_type(struct files_struct *fsp) return fsp->lease_type; } -static uint32_t lease_type_is_exclusive(uint32_t lease_type) -{ - if ((lease_type & (SMB2_LEASE_READ | SMB2_LEASE_WRITE)) == - (SMB2_LEASE_READ | SMB2_LEASE_WRITE)) { - return true; - } - - return false; -} - -bool fsp_lease_type_is_exclusive(struct files_struct *fsp) -{ - uint32_t lease_type = fsp_lease_type(fsp); - - return lease_type_is_exclusive(lease_type); -} - const struct GUID *fsp_client_guid(const files_struct *fsp) { return &fsp->conn->sconn->client->global->client_guid; diff --git a/source3/locking/locking.c b/source3/locking/locking.c index b002e80fee4..befdc10f369 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -468,17 +468,6 @@ char *share_mode_str(TALLOC_CTX *ctx, int num, (unsigned int)e->name_hash); } -/******************************************************************* - Fetch a share mode where we know one MUST exist. This call reference - counts it internally to allow for nested lock fetches. -********************************************************************/ - -struct share_mode_lock *get_existing_share_mode_lock(TALLOC_CTX *mem_ctx, - const struct file_id id) -{ - return get_share_mode_lock(mem_ctx, id, NULL, NULL, NULL); -} - struct rename_share_filename_state { struct share_mode_lock *lck; struct messaging_context *msg_ctx; diff --git a/source3/locking/proto.h b/source3/locking/proto.h index d6e7a54a766..7fc177d7aa6 100644 --- a/source3/locking/proto.h +++ b/source3/locking/proto.h @@ -128,8 +128,6 @@ void locking_close_file(files_struct *fsp, 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); bool rename_share_filename(struct messaging_context *msg_ctx, struct share_mode_lock *lck, @@ -212,7 +210,6 @@ bool release_posix_lock_posix_flavour(files_struct *fsp, /* The following definitions come from locking/leases_util.c */ uint32_t map_oplock_to_lease_type(uint16_t op_type); uint32_t fsp_lease_type(struct files_struct *fsp); -bool fsp_lease_type_is_exclusive(struct files_struct *fsp); const struct GUID *fsp_client_guid(const files_struct *fsp); #endif /* _LOCKING_PROTO_H_ */ diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c index dd19c53024b..75912ec5dc8 100644 --- a/source3/locking/share_mode_lock.c +++ b/source3/locking/share_mode_lock.c @@ -468,7 +468,7 @@ struct locking_tdb_data_fetch_state { static void locking_tdb_data_fetch_fn( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data) @@ -768,7 +768,7 @@ struct get_static_share_mode_data_state { static void get_static_share_mode_data_fn( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data) @@ -1005,6 +1005,17 @@ static int share_mode_lock_destructor(struct share_mode_lock *lck) return 0; } +/******************************************************************* + Fetch a share mode where we know one MUST exist. This call reference + counts it internally to allow for nested lock fetches. +********************************************************************/ + +struct share_mode_lock *get_existing_share_mode_lock(TALLOC_CTX *mem_ctx, + const struct file_id id) +{ + return get_share_mode_lock(mem_ctx, id, NULL, NULL, NULL); +} + struct share_mode_do_locked_state { TDB_DATA key; void (*fn)(const uint8_t *buf, @@ -1017,7 +1028,7 @@ struct share_mode_do_locked_state { static void share_mode_do_locked_fn( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data) @@ -1324,7 +1335,7 @@ struct fetch_share_mode_unlocked_state { static void fetch_share_mode_unlocked_parser( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data) @@ -1395,7 +1406,7 @@ struct fetch_share_mode_state { static void fetch_share_mode_fn( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data); @@ -1460,7 +1471,7 @@ struct tevent_req *fetch_share_mode_send(TALLOC_CTX *mem_ctx, static void fetch_share_mode_fn( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data) @@ -1564,7 +1575,7 @@ struct share_mode_forall_state { static void share_mode_forall_dump_fn( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, void *private_data) @@ -1782,6 +1793,7 @@ bool set_share_mode(struct share_mode_lock *lck, uid_t uid, uint64_t mid, uint16_t op_type, + const struct smb2_lease_key *lease_key, uint32_t share_access, uint32_t access_mask) { @@ -1839,7 +1851,7 @@ bool set_share_mode(struct share_mode_lock *lck, if (op_type == LEASE_OPLOCK) { const struct GUID *client_guid = fsp_client_guid(fsp); e.client_guid = *client_guid; - e.lease_key = fsp->lease->lease.lease_key; + e.lease_key = *lease_key; } ok = share_mode_entry_put(&e, &e_buf); @@ -2108,7 +2120,7 @@ struct share_mode_count_entries_state { static void share_mode_count_entries_fn( struct server_id exclusive, size_t num_shared, - struct server_id *shared, + const struct server_id *shared, const uint8_t *data, size_t datalen, -- Samba Shared Repository