s3/locking: prime flags in a fresh sharemode data object
authorRalph Boehme <slow@samba.org>
Mon, 11 May 2020 09:35:04 +0000 (11:35 +0200)
committerRalph Boehme <slow@samba.org>
Tue, 12 May 2020 19:52:48 +0000 (19:52 +0000)
This is needed to prime the logic in share_mode_flags_restrict() for the
following scenario:

* (First) CREATE on a file with FILE_SHARE_NONE and
  access_mask=FILE_READ_ATTRIBUTES (a stat-open).

* share_mode_flags_restrict() gets called with

    share_mode_flags_restrict(flags=0,
                              access_mask=0x80,
                              share_mode=0,
                              lease_type=UINT32_MAX)

  and returns a value where none of the FILE_SHARE_* flags is set.

As a result share_mode_data.flags doesn't reflect the share-modes in effect.

This doesn't change any current visible behaviour outside of open_mode_check(),
but it avoids calling share_mode_forall_entries() in open_mode_check_fn().

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14375

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Tue May 12 19:52:48 UTC 2020 on sn-devel-184

source3/locking/share_mode_lock.c

index de59b8d254580defc290561536310f6835f34e5c..ff77f12d1f73eabc15eda2f65b096fda4d4f8f47 100644 (file)
@@ -530,6 +530,9 @@ static struct share_mode_data *fresh_share_mode_lock(
                goto fail;
        }
        d->old_write_time = full_timespec_to_nt_time(old_write_time);
+       d->flags = SHARE_MODE_SHARE_DELETE |
+               SHARE_MODE_SHARE_WRITE |
+               SHARE_MODE_SHARE_READ;
        d->modified = false;
        d->fresh = true;
        return d;