[Samba] Possible Bug in vfs_fruit with encoding=native
Dominik Vogel
windoze345 at googlemail.com
Mon Nov 15 15:43:41 UTC 2021
Anyone got an Idea?
> Am 03.11.2021 um 16:27 schrieb Dominik Vogel <windoze345 at googlemail.com>:
>
> Hello,
>
> I have problems with setting custom folder-icons from a Mac on a samba share.
> My system is macOS 10.15.7 the server is Debian 11 with Samba 4.13.5 (Default Package in Debian).
> I also tried 4.15.1 from "apt.van-belle.nl“ but the results were worse (More details below).
> All the tests were done with a fresh Debian-VM.
>
> With Samba 4.13.5 it works when I set „fruit:encoding = private“.
> In the log-file It looks to me that „ad_convert_delete_adfile“ gets the non-converted filename
> and then fails since the file was created with the converted name.
>
> I replaced the Carriage-Return character in the snippets with <CR> to make it clearer.
> "Datei oder Verzeichnis nicht gefunden“ is „File or Directory not Found“ in English.
> ----------------------------------------
> Log snippet from 4.13.5 „fruit:encoding = native“
>
> You can see the name correctly converted in the first lines but the deletion uses the original one and fails.
>
>
> [2021/11/03 14:46:21.190135, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1389(check_reduced_name)
> check_reduced_name realpath [._Icon] -> [/srv/share1/a/._Icon<CR>]
> [2021/11/03 14:46:21.190149, 5, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1495(check_reduced_name)
> check_reduced_name: ._Icon reduced to /srv/share1/a/._Icon<CR>
> [2021/11/03 14:46:21.190165, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:387(streams_xattr_openat)
> streams_xattr_open called for ._Icon<CR> with flags 0x20802
> [2021/11/03 14:46:21.190186, 4, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:939(vfs_ChDir)
> vfs_ChDir to /srv/share1
> [2021/11/03 14:46:21.190217, 5, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1001(vfs_ChDir)
> vfs_ChDir: vfs_ChDir got /srv/share1
> [2021/11/03 14:46:21.190237, 2] ../../source3/smbd/open.c:1518(open_file)
> dv opened file a/._Icon read=Yes write=Yes (numopen=1)
> [2021/11/03 14:46:21.190296, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:1011(streams_xattr_pread)
> streams_xattr_pread: offset=0, size=82
> [2021/11/03 14:46:21.190326, 0] ../../source3/lib/adouble.c:1374(ad_convert_delete_adfile)
> ad_convert_delete_adfile: Unlinking [a/._Icon] failed: Datei oder Verzeichnis nicht gefunden
> [2021/11/03 14:46:21.190534, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:522(streams_xattr_close)
> streams_xattr_close: streams_xattr_close called [a/._Icon] fd [50]
> [2021/11/03 14:46:21.190559, 2] ../../source3/smbd/close.c:824(close_normal_file)
> dv closed file a/._Icon (numopen=0) NT_STATUS_OK
> [2021/11/03 14:46:21.190574, 0] ../../source3/modules/vfs_fruit.c:3992(fruit_create_file)
> fruit_create_file: ad_convert() failed
>
> ----------------------------------------
> Log snippet from 4.13.5 „fruit:encoding = private“
>
> Since the special characters aren’t converted with this setting, the deletion with the original name succeeds.
> The Icon is correctly shown in the macOS Finder.
>
>
> [2021/11/03 14:46:23.416321, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1389(check_reduced_name)
> check_reduced_name realpath [._Icon] -> [/srv/share2/a/._Icon]
> [2021/11/03 14:46:23.416335, 5, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1495(check_reduced_name)
> check_reduced_name: ._Icon reduced to /srv/share2/a/._Icon
> [2021/11/03 14:46:23.416351, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:387(streams_xattr_openat)
> streams_xattr_open called for ._Icon with flags 0x20802
> [2021/11/03 14:46:23.416372, 4, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:939(vfs_ChDir)
> vfs_ChDir to /srv/share2
> [2021/11/03 14:46:23.416401, 5, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1001(vfs_ChDir)
> vfs_ChDir: vfs_ChDir got /srv/share2
> [2021/11/03 14:46:23.416421, 2] ../../source3/smbd/open.c:1518(open_file)
> dv opened file a/._Icon read=Yes write=Yes (numopen=1)
> [2021/11/03 14:46:23.416471, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:1011(streams_xattr_pread)
> streams_xattr_pread: offset=0, size=82
> [2021/11/03 14:46:23.416533, 1] ../../source3/lib/adouble.c:1380(ad_convert_delete_adfile)
> ad_convert_delete_adfile: Unlinked [a/._Icon] after conversion
> [2021/11/03 14:46:23.416602, 10, pid=1039, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:522(streams_xattr_close)
> streams_xattr_close: streams_xattr_close called [a/._Icon] fd [50]
> [2021/11/03 14:46:23.416671, 2] ../../source3/smbd/close.c:824(close_normal_file)
> dv closed file a/._Icon (numopen=0) NT_STATUS_OK
>
> ----------------------------------------
> Log snippet from 4.15.1 „fruit:encoding = native“
>
> I have basically the same error only the path / filenames aren’t shown in the „check_reduced_name“ lines
>
>
> [2021/11/03 15:25:12.022604, 10, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1323(check_reduced_name)
> check_reduced_name: check_reduced_name [.] [/srv/share1]
> [2021/11/03 15:25:12.022679, 10, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1387(check_reduced_name)
> check_reduced_name realpath [.] -> [/srv/share1]
> [2021/11/03 15:25:12.022701, 5, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1493(check_reduced_name)
> check_reduced_name: . reduced to /srv/share1
> [2021/11/03 15:25:12.022720, 10, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:333(streams_xattr_openat)
> streams_xattr_open called for . with flags 0x30000
> [2021/11/03 15:25:12.022754, 10, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:463(streams_xattr_close)
> streams_xattr_close: streams_xattr_close called [/srv/share1] fd [52]
> [2021/11/03 15:25:12.022799, 5, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1000(vfs_ChDir)
> vfs_ChDir: vfs_ChDir got /srv/share1
> [2021/11/03 15:25:12.022831, 0] ../../source3/lib/adouble.c:1411(ad_convert_delete_adfile)
> ad_convert_delete_adfile: Unlinking [a/._Icon] failed: Datei oder Verzeichnis nicht gefunden
> [2021/11/03 15:25:12.023111, 10, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:463(streams_xattr_close)
> streams_xattr_close: streams_xattr_close called [a] fd [49]
> [2021/11/03 15:25:12.023165, 10, pid=5813, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:463(streams_xattr_close)
> streams_xattr_close: streams_xattr_close called [a/._Icon] fd [48]
> [2021/11/03 15:25:12.023200, 0] ../../source3/modules/vfs_fruit.c:4171(fruit_create_file)
> fruit_create_file: ad_convert() failed
>
> ----------------------------------------
> Log snippet from 4.15.1 „fruit:encoding = private“
>
> Here the deletion succeeds (same as 4.13.5) but the icon still doesn’t show up in the macOS Finder.
> If I look on the server directly I see the "._Icon“ file but it is only 82 bytes long (should be about 980kB with my test-icon).
> So there seems to be an additional regression in the ea / adouble handling somewhere between 4.13.5 and 4.15.1.
> If I set an icon with 4.13.5 and only switch to 4.15.1 the icon still shows up correctly in the Finder.
> I can delete the icon successfully but can’t set a new one. So it’s only the writing which doesn’t work the reading seems fine.
>
>
> [2021/11/03 16:04:38.200513, 10, pid=6879, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1323(check_reduced_name)
> check_reduced_name: check_reduced_name [.] [/srv/share2]
> [2021/11/03 16:04:38.200530, 10, pid=6879, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1387(check_reduced_name)
> check_reduced_name realpath [.] -> [/srv/share2]
> [2021/11/03 16:04:38.200545, 5, pid=6879, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1493(check_reduced_name)
> check_reduced_name: . reduced to /srv/share2
> [2021/11/03 16:04:38.200560, 10, pid=6879, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:333(streams_xattr_openat)
> streams_xattr_open called for . with flags 0x30000
> [2021/11/03 16:04:38.200588, 10, pid=6879, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:463(streams_xattr_close)
> streams_xattr_close: streams_xattr_close called [/srv/share2] fd [54]
> [2021/11/03 16:04:38.200608, 5, pid=6879, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/smbd/vfs.c:1000(vfs_ChDir)
> vfs_ChDir: vfs_ChDir got /srv/share2
> [2021/11/03 16:04:38.200642, 1] ../../source3/lib/adouble.c:1418(ad_convert_delete_adfile)
> ad_convert_delete_adfile: Unlinked [a/._Icon] after conversion
> [2021/11/03 16:04:38.200657, 10, pid=6879, effective(1000, 1000), real(1000, 0), class=vfs] ../../source3/modules/vfs_streams_xattr.c:463(streams_xattr_close)
> streams_xattr_close: streams_xattr_close called [a] fd [52]
>
> ----------------------------------------
> My smb.conf
>
> [global]
> ea support = yes
> fruit:aapl = yes
> fruit:delete_empty_adfiles = yes
> fruit:encoding = native
> fruit:locking = none
> fruit:metadata = netatalk
> fruit:model = RackMac
> fruit:resource = file
> fruit:veto_appledouble = no
> fruit:wipe_intentionally_left_blank_rfork = yes
> guest account = guestusr
> log file = /var/log/samba/log.%m
> log level = 2 vfs:99
> map to guest = Bad User
> max log size = 1000
> mdns name = mdns
> multicast dns register = yes
> nt acl support = no
> obey pam restrictions = yes
> pam password change = yes
> panic action = /usr/share/samba/panic-action %d
> passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
> passwd program = /usr/bin/passwd %u
> printcap name = cups
> printing = cups
> server signing = auto
> streams_xattr:prefix = user.
> streams_xattr:store_stream_type = no
> time server = yes
> unix extensions = no
> unix password sync = yes
> username map = /etc/samba/smbusers
> vfs objects = catia fruit streams_xattr
>
> [Share1]
> create mask = 0771
> directory mask = 02770
> force create mode = 0660
> force directory mode = 02770
> path = /srv/share1
> writeable = yes
> fruit:encoding = native
>
> [Share2]
> create mask = 0771
> directory mask = 02770
> force create mode = 0660
> force directory mode = 02770
> path = /srv/share2
> writeable = yes
> fruit:encoding = private
>
> ----------------------------------------
>
> If you need additional information, let me know.
>
> Regards,
> Dominik Vogel
>
More information about the samba
mailing list