vfs_shadow_copy2: Preserve all open flags assuming ROFS
authorAnoop C S <anoopcs@samba.org>
Thu, 12 Nov 2020 14:57:24 +0000 (20:27 +0530)
committerKarolin Seeger <kseeger@samba.org>
Thu, 19 Nov 2020 14:09:43 +0000 (14:09 +0000)
Instead of replacing open flags with just O_RDONLY, filter out all those
flags unrelated to a Read Only File System

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

Signed-off-by: Anoop C S <anoopcs@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph Böhme <slow@samba.org>
Autobuild-Date(master): Thu Nov 12 17:23:19 UTC 2020 on sn-devel-184

(cherry picked from commit e9e06a11daf036abf7a7022ebc8eaefde178aa52)

Autobuild-User(v4-12-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-12-test): Thu Nov 19 14:09:43 UTC 2020 on sn-devel-184

source3/modules/vfs_shadow_copy2.c

index 1957015931b49479d76f7a49c0c0e3216fa2efe3..dc4176e25df03a5349aee7d478a5aa8b094483d6 100644 (file)
@@ -1462,7 +1462,7 @@ static int shadow_copy2_open(vfs_handle_struct *handle,
                         * EINVAL which we carefully map to EROFS. In sum, this
                         * matches Windows behaviour.
                         */
-                       flags = O_RDONLY;
+                       flags &= ~(O_WRONLY | O_RDWR | O_CREAT);
                }
                return SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
        }
@@ -1483,7 +1483,7 @@ static int shadow_copy2_open(vfs_handle_struct *handle,
         * pwrite() syscall with EINVAL which we carefully map to EROFS. In sum,
         * this matches Windows behaviour.
         */
-       flags = O_RDONLY;
+       flags &= ~(O_WRONLY | O_RDWR | O_CREAT);
 
        ret = SMB_VFS_NEXT_OPEN(handle, smb_fname, fsp, flags, mode);
        if (ret == -1) {