From: Ralph Boehme Date: Mon, 17 Mar 2025 13:56:24 +0000 (+0100) Subject: s3/locking: store NTCREATEX_FLAG_STREAM_BASEOPEN as share_entry_flag X-Git-Tag: tevent-0.17.0~360 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=638a4c2bbb27265bebdaca3b28f494ed5a65d8a3;p=thirdparty%2Fsamba.git s3/locking: store NTCREATEX_FLAG_STREAM_BASEOPEN as share_entry_flag No change in behaviour. Signed-off-by: Ralph Boehme Reviewed-by: Volker Lendecke --- diff --git a/source3/librpc/idl/open_files.idl b/source3/librpc/idl/open_files.idl index 6b4d77e059f..0182bbd3046 100644 --- a/source3/librpc/idl/open_files.idl +++ b/source3/librpc/idl/open_files.idl @@ -13,7 +13,8 @@ import "misc.idl"; interface open_files { typedef [public,bitmap16bit] bitmap { - SHARE_ENTRY_FLAG_POSIX_OPEN = 0x0001 + SHARE_ENTRY_FLAG_POSIX_OPEN = 0x0001, + SHARE_ENTRY_FLAG_STREAM_BASEOPEN = 0x0002 } share_entry_flags; typedef [enum16bit] enum { diff --git a/source3/locking/locking.c b/source3/locking/locking.c index 8c317b4c1f0..505f0b5ad07 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -1075,8 +1075,7 @@ static bool file_has_open_streams_fn( { struct file_has_open_streams_state *state = private_data; - if ((e->private_options & - NTCREATEX_FLAG_STREAM_BASEOPEN) == 0) { + if (!(e->flags & SHARE_ENTRY_FLAG_STREAM_BASEOPEN)) { return false; } diff --git a/source3/locking/share_mode_lock.c b/source3/locking/share_mode_lock.c index e3dacbc636a..cf76c457b21 100644 --- a/source3/locking/share_mode_lock.c +++ b/source3/locking/share_mode_lock.c @@ -3517,10 +3517,14 @@ NTSTATUS _share_mode_entry_prepare_unlock( uint16_t fsp_get_share_entry_flags(const struct files_struct *fsp) { uint16_t flags = 0; + uint32_t private_options = fh_get_private_options(fsp->fh); if (fsp->fsp_flags.posix_open) { flags |= SHARE_ENTRY_FLAG_POSIX_OPEN; } + if (private_options & NTCREATEX_FLAG_STREAM_BASEOPEN) { + flags |= SHARE_ENTRY_FLAG_STREAM_BASEOPEN; + } return flags; } @@ -3529,4 +3533,10 @@ void fsp_apply_share_entry_flags(struct files_struct *fsp, uint16_t flags) if (flags & SHARE_ENTRY_FLAG_POSIX_OPEN) { fsp->fsp_flags.posix_open = true; } + /* + * This flag is only ever set on the internal base_fsp of a stream + * fsp and we don't expect it to be set when we're called as part + * of restoring an fsp when doing a Durable Handle reconnect. + */ + SMB_ASSERT(!(flags & SHARE_ENTRY_FLAG_STREAM_BASEOPEN)); }