]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3/locking: store NTCREATEX_FLAG_STREAM_BASEOPEN as share_entry_flag
authorRalph Boehme <slow@samba.org>
Mon, 17 Mar 2025 13:56:24 +0000 (14:56 +0100)
committerVolker Lendecke <vl@samba.org>
Wed, 9 Apr 2025 13:40:36 +0000 (13:40 +0000)
No change in behaviour.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/librpc/idl/open_files.idl
source3/locking/locking.c
source3/locking/share_mode_lock.c

index 6b4d77e059fc91140207c57f81db19d4f7adc258..0182bbd304618c31c79a75f1baabe5ee4068f75f 100644 (file)
@@ -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 {
index 8c317b4c1f06b80efb3d2a4b86a20c932e7d1f4a..505f0b5ad076de279ee52992a01aa5eb92e90143 100644 (file)
@@ -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;
        }
 
index e3dacbc636a1a04f1955d1aecf48c0b50804d6e4..cf76c457b21ada407a06557b8491221db8092235 100644 (file)
@@ -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));
 }