]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: Code inside non_widelink_open() breaks an invarient inside the VFS. Demonst...
authorJeremy Allison <jra@samba.org>
Thu, 1 Jul 2021 18:26:21 +0000 (11:26 -0700)
committerJeremy Allison <jra@samba.org>
Sun, 4 Jul 2021 17:15:34 +0000 (17:15 +0000)
vfs_fruit isn't the bad guy here. It's just a convenient
place to show that non_widelink_open() violates:

fsp->base_fsp->fsp_name->fsp == fsp->base_fsp invarient

Add selftest/knownfail.d/fruit_vfs_invariant to show
what this breaks. Next patch will fix the non_widelink_open()
code and remove the knownfail.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
selftest/knownfail.d/fruit_vfs_invariant [new file with mode: 0644]
source3/modules/vfs_fruit.c

diff --git a/selftest/knownfail.d/fruit_vfs_invariant b/selftest/knownfail.d/fruit_vfs_invariant
new file mode 100644 (file)
index 0000000..e8a435e
--- /dev/null
@@ -0,0 +1,18 @@
+^samba3.vfs.fruit metadata_netatalk.read metadata\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.write metadata\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.SMB2/CREATE context AAPL\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.create delete-on-close AFP_AfpInfo\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.setinfo delete-on-close AFP_AfpInfo\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.setinfo eof AFP_AfpInfo\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.delete AFP_AfpInfo by writing all 0\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.null afpinfo\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.copy-chunk streams\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.OS X AppleDouble file conversion\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.readdir_attr with names with illegal ntfs characters\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.OS X AppleDouble file conversion without embedded xattr\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.empty_stream\(nt4_dc\)
+^samba3.vfs.fruit metadata_netatalk.writing_afpinfo\(nt4_dc\)
+^samba3.vfs.unfruit metadata_netatalk.unconvert\(nt4_dc:local\)
+^samba3.vfs.fruit_netatalk.read netatalk metadata\(nt4_dc\)
+^samba3.vfs.fruit_netatalk.stream names with locally created xattr\(nt4_dc\)
+^samba3.vfs.fruit_netatalk.locking conflict\(nt4_dc\)
index ae1541ea9f19559b30c8d1455fa82316998dedab..7d9f4f7a1130711066cac33e4612450cf1fa25da 100644 (file)
@@ -1425,6 +1425,13 @@ static int fruit_open_meta_netatalk(vfs_handle_struct *handle,
 
        DBG_DEBUG("Path [%s]\n", smb_fname_str_dbg(smb_fname));
 
+       /*
+        * We know this is a stream open, so fsp->base_fsp must
+        * already be open.
+        */
+       SMB_ASSERT(fsp->base_fsp != NULL);
+       SMB_ASSERT(fsp->base_fsp->fsp_name->fsp == fsp->base_fsp);
+
        ad = ad_get(talloc_tos(), handle, smb_fname, ADOUBLE_META);
        if (ad != NULL) {
                meta_exists = true;