The branch, master has been updated via 035f6d914d1 vfs_fruit: add fruit:convert_adouble parameter via 3bf97f19c36 vfs_fruit: just log failing AppleDouble conversion via 55bd1045648 libadouble: allow FILE_SHARE_DELETE in ad_convert_xattr() via 06f0c070a0b vfs_fruit: never return AFP_Resource stream for directories via 9b91a8bad2f vfs_fruit: return ENOENT instead of EISDIR when trying to open AFP_Resource for a directory via 59eadfe21ac CI: add a test for fruit AppleDouble conversion when deletion triggers conversion from 412373984db smbd: also reset struct stat_ex.cached_dos_attributes in SET_STAT_INVALID()
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 035f6d914d133cf3248f15b1be06a9e1837238da Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 12:32:00 2023 +0200 vfs_fruit: add fruit:convert_adouble parameter https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> Autobuild-User(master): Jeremy Allison <j...@samba.org> Autobuild-Date(master): Fri May 26 00:52:29 UTC 2023 on atb-devel-224 commit 3bf97f19c36d26b4178f7cb6202bbdd44de0c1aa Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 12:25:04 2023 +0200 vfs_fruit: just log failing AppleDouble conversion BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 55bd10456486628cad2bd085618e873598401c3b Author: Ralph Boehme <s...@samba.org> Date: Tue May 23 17:28:33 2023 +0200 libadouble: allow FILE_SHARE_DELETE in ad_convert_xattr() Not specifying FILE_SHARE_DELETE wasn't done intentionally. Not setting the flag triggers the following problem: * client sends a CREATE with delete access * this triggers a call to open_streams_for_delete() where we check for conflicting opens on any of the streams of the file or directory * if the file (or directory) has a stream like ":com.apple.quarantine" the stream is opened with DELETE_ACCESS and kept open when the next step might: * if the file (or directory) has a Mac specific :AFP_AfpInfo stream, the ad_convert() routine in fruit_create_file() is triggered * ad_convert() checks if the file (or ...) has a sidecar ._ AppleDouble file, if it has: * in ad_convert_xattr() we unpack any set of xattrs encoded in the AppleDouble file and recreate them as streams with the VFS. Now, if any of these xattrs happens to be converted to a stream that we still have open in open_streams_for_delete() (see above) we get a NT_STATUS_SHARING_VIOLATION This error gets passed up the stack back to open_streams_for_delete() so the client CREATE request fails and the client is unhappy. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 06f0c070a0b18313f48362aa326e3e7e6a096492 Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 19:37:17 2023 +0200 vfs_fruit: never return AFP_Resource stream for directories The macOS client creates ._ AppleDouble files for directories that do contain an (empty) resource fork AppleDouble entry. So when going from a Samba server config without streams module (or when migrating data from another server without streams support), to a Samba config with a streams module and vfs_fruit, fruit_streaminfo() will wrongly return the AFP_Resource from the AppleDouble file as stream to the client. To address this, just never return an AFP_Resource stream for directories when listing streams in fruit_streaminfo(). ad_convert(), when configured with fruit:delete_empty_adfiles = true fruit:wipe_intentionally_left_blank_rfork = true will happily discard the AFP_Resource from the AppleDouble file. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 9b91a8bad2ff8da9eb56f1f9d640bcea294a5a0a Author: Ralph Boehme <s...@samba.org> Date: Mon May 22 19:35:33 2023 +0200 vfs_fruit: return ENOENT instead of EISDIR when trying to open AFP_Resource for a directory Translates to NT_STATUS_OBJECT_NAME_NOT_FOUND which is the same error macOS returns in this case. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> commit 59eadfe21aca6d563f86ea656517216036421bca Author: Ralph Boehme <s...@samba.org> Date: Wed May 24 21:28:48 2023 +0200 CI: add a test for fruit AppleDouble conversion when deletion triggers conversion BUG: https://bugzilla.samba.org/show_bug.cgi?id=15378 Signed-off-by: Ralph Boehme <s...@samba.org> Reviewed-by: Jeremy Allison <j...@samba.org> ----------------------------------------------------------------------- Summary of changes: docs-xml/manpages/vfs_fruit.8.xml | 13 + source3/lib/adouble.c | 2 +- source3/modules/vfs_fruit.c | 48 +- source4/torture/vfs/fruit.c | 954 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 999 insertions(+), 18 deletions(-) Changeset truncated at 500 lines: diff --git a/docs-xml/manpages/vfs_fruit.8.xml b/docs-xml/manpages/vfs_fruit.8.xml index 6950898a7d1..2215f031312 100644 --- a/docs-xml/manpages/vfs_fruit.8.xml +++ b/docs-xml/manpages/vfs_fruit.8.xml @@ -406,6 +406,19 @@ </listitem> </varlistentry> + <varlistentry> + <term>fruit:convert_adouble = yes | no</term> + <listitem> + <para>Whether an attempt shall be made to convert ._ AppleDouble + sidecar files to native streams (xattrs when using + vfs_streams_xattr). The main use case for this conversion is + transparent migration from a server config without streams support + where the macOS client created those AppleDouble sidecar + files.</para> + <para>The default is <emphasis>yes</emphasis>.</para> + </listitem> + </varlistentry> + </variablelist> </refsect1> diff --git a/source3/lib/adouble.c b/source3/lib/adouble.c index ee4166f9628..3181a390d35 100644 --- a/source3/lib/adouble.c +++ b/source3/lib/adouble.c @@ -1236,7 +1236,7 @@ static bool ad_convert_xattr(vfs_handle_struct *handle, NULL, /* dirfsp */ stream_name, /* fname */ FILE_GENERIC_WRITE, /* access_mask */ - FILE_SHARE_READ | FILE_SHARE_WRITE, /* share_access */ + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, /* share_access */ FILE_OPEN_IF, /* create_disposition */ 0, /* create_options */ 0, /* file_attributes */ diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index 637e2a1a6ed..ce5ae38505e 100644 --- a/source3/modules/vfs_fruit.c +++ b/source3/modules/vfs_fruit.c @@ -131,6 +131,7 @@ struct fruit_config_data { const char *model; bool time_machine; off_t time_machine_max_size; + bool convert_adouble; bool wipe_intentionally_left_blank_rfork; bool delete_empty_adfiles; @@ -381,6 +382,10 @@ static int init_fruit_config(vfs_handle_struct *handle) config->time_machine_max_size = conv_str_size(tm_size_str); } + config->convert_adouble = lp_parm_bool( + SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, + "convert_adouble", true); + config->wipe_intentionally_left_blank_rfork = lp_parm_bool( SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, "wipe_intentionally_left_blank_rfork", false); @@ -1567,7 +1572,7 @@ static int fruit_open_rsrc_adouble(vfs_handle_struct *handle, S_ISDIR(fsp->base_fsp->fsp_name->st.st_ex_mode)) { /* sorry, but directories don't have a resource fork */ - errno = EISDIR; + errno = ENOENT; rc = -1; goto exit; } @@ -3959,6 +3964,10 @@ static NTSTATUS fruit_streaminfo_rsrc(vfs_handle_struct *handle, struct fruit_config_data *config = NULL; NTSTATUS status; + if (S_ISDIR(smb_fname->st.st_ex_mode)) { + return NT_STATUS_OK; + } + SMB_VFS_HANDLE_GET_DATA(handle, config, struct fruit_config_data, return NT_STATUS_INTERNAL_ERROR); @@ -4286,7 +4295,10 @@ static NTSTATUS fruit_create_file(vfs_handle_struct *handle, SMB_VFS_HANDLE_GET_DATA(handle, config, struct fruit_config_data, return NT_STATUS_UNSUCCESSFUL); - if (is_apple_stream(smb_fname->stream_name) && !internal_open) { + if (is_apple_stream(smb_fname->stream_name) && + !internal_open && + config->convert_adouble) + { uint32_t conv_flags = 0; if (config->wipe_intentionally_left_blank_rfork) { @@ -4301,8 +4313,8 @@ static NTSTATUS fruit_create_file(vfs_handle_struct *handle, macos_string_replace_map, conv_flags); if (ret != 0) { - DBG_ERR("ad_convert() failed\n"); - return NT_STATUS_UNSUCCESSFUL; + DBG_ERR("ad_convert(\"%s\") failed\n", + smb_fname_str_dbg(smb_fname)); } } @@ -4400,20 +4412,22 @@ static NTSTATUS fruit_freaddir_attr(struct vfs_handle_struct *handle, DBG_DEBUG("Path [%s]\n", fsp_str_dbg(fsp)); - if (config->wipe_intentionally_left_blank_rfork) { - conv_flags |= AD_CONV_WIPE_BLANK; - } - if (config->delete_empty_adfiles) { - conv_flags |= AD_CONV_DELETE; - } + if (config->convert_adouble) { + if (config->wipe_intentionally_left_blank_rfork) { + conv_flags |= AD_CONV_WIPE_BLANK; + } + if (config->delete_empty_adfiles) { + conv_flags |= AD_CONV_DELETE; + } - ret = ad_convert(handle, - fsp->fsp_name, - macos_string_replace_map, - conv_flags); - if (ret != 0) { - DBG_ERR("ad_convert() failed\n"); - return NT_STATUS_UNSUCCESSFUL; + ret = ad_convert(handle, + fsp->fsp_name, + macos_string_replace_map, + conv_flags); + if (ret != 0) { + DBG_ERR("ad_convert(\"%s\") failed\n", + fsp_str_dbg(fsp)); + } } *pattr_data = talloc_zero(mem_ctx, struct readdir_attr_data); diff --git a/source4/torture/vfs/fruit.c b/source4/torture/vfs/fruit.c index 3621fec460c..99d63becbb4 100644 --- a/source4/torture/vfs/fruit.c +++ b/source4/torture/vfs/fruit.c @@ -7017,6 +7017,959 @@ done: return ret; } +/* +------------------------------------------------------------------------------- +MagicNumber: 00051607 : AppleDouble +Version : 00020000 : Version 2 +Filler : 4D 61 63 20 4F 53 20 58 20 20 20 20 20 20 20 20 : Mac OS X +Num. of ent: 0002 : 2 + +------------------------------------------------------------------------------- +Entry ID : 00000009 : Finder Info +Offset : 00000032 : 50 +Length : 00000EB0 : 3760 + +-DInfo-----: +Rect top : 0000 : 0 +Rect left : 0000 : 0 +Rect bottom: 0000 : 0 +Rect right : 0000 : 0 +isAlias : 0 +Invisible : 0 +hasBundle : 0 +nameLocked : 0 +Stationery : 0 +CustomIcon : 0 +Reserved : 0 +Inited : 1 +NoINITS : 0 +Shared : 0 +SwitchLaunc: 0 +Hidden Ext : 0 +color : 000 : none +isOnDesk : 0 +Location v : 0000 : 0 +Location h : 0000 : 0 +View : 0000 : .. + +-DXInfo----: +Scroll v : 0000 : 0 +Scroll h : 0000 : 0 +Rsvd|OpnChn: 00000000 : 0 +AreInvalid : 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +CustomBadge: 0 +ObjctIsBusy: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +unknown bit: 0 +RoutingInfo: 0 +unknown bit: 0 +unknown bit: 0 +Comment : 0000 : .. +PutAway : 00000000 : 0 + +-EA--------: +pad : 0000 : .. +magic : 41545452 : ATTR +debug_tag : 0081714C : 8483148 +total_size : 00000EE2 : 3810 +data_start : 00000098 : 152 +data_length: 00000039 : 57 +reserved[0]: 00000000 : .... +reserved[1]: 00000000 : .... +reserved[2]: 00000000 : .... +flags : 0000 : .. +num_attrs : 0001 : 1 +-EA ENTRY--: +offset : 00000098 : 152 +length : 00000039 : 57 +flags : 0000 : .. +namelen : 15 : 21 +-EA NAME---: 0 1 2 3 4 5 6 7 8 9 A B C D E F : (ASCII) +00000000 : 63 6F 6D 2E 61 70 70 6C 65 2E 71 75 61 72 61 6E : com.apple.quaran +00000010 : 74 69 6E 65 00 : tine. +-EA VALUE--: 0 1 2 3 4 5 6 7 8 9 A B C D E F : (ASCII) +00000000 : 30 30 38 31 3B 36 32 65 61 33 37 66 64 3B 43 68 : 0081;62ea37fd;Ch +00000010 : 72 6F 6D 65 3B 42 35 39 46 42 39 45 44 2D 35 41 : rome;B59FB9ED-5A +00000020 : 32 39 2D 34 45 35 42 2D 38 35 36 43 2D 37 45 44 : 29-4E5B-856C-7ED +00000030 : 30 45 46 45 41 37 30 41 43 : 0EFEA70AC + +-RAW DUMP--: 0 1 2 3 4 5 6 7 8 9 A B C D E F : (ASCII) +00000000 : 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 : ................ +00000010 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000020 : 00 00 41 54 54 52 00 81 71 4C 00 00 0E E2 00 00 : ..ATTR..qL...... +00000030 : 00 98 00 00 00 39 00 00 00 00 00 00 00 00 00 00 : .....9.......... +00000040 : 00 00 00 00 00 01 00 00 00 98 00 00 00 39 00 00 : .............9.. +00000050 : 15 63 6F 6D 2E 61 70 70 6C 65 2E 71 75 61 72 61 : .com.apple.quara +00000060 : 6E 74 69 6E 65 00 30 30 38 31 3B 36 32 65 61 33 : ntine.0081;62ea3 +00000070 : 37 66 64 3B 43 68 72 6F 6D 65 3B 42 35 39 46 42 : 7fd;Chrome;B59FB +00000080 : 39 45 44 2D 35 41 32 39 2D 34 45 35 42 2D 38 35 : 9ED-5A29-4E5B-85 +00000090 : 36 43 2D 37 45 44 30 45 46 45 41 37 30 41 43 00 : 6C-7ED0EFEA70AC. +000000A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000100 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000110 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000120 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000130 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000140 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000150 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000160 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000170 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000180 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000190 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000001F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000200 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000210 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000220 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000230 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000240 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000250 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000260 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000270 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000280 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000290 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000002F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000300 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000310 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000320 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000330 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000340 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000350 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000360 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000370 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000380 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000390 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000003F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000400 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000410 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000420 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000430 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000440 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000450 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000460 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000470 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000480 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000490 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000004F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000500 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000510 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000520 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000530 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000540 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000550 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000560 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000570 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000580 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000590 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000005F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000600 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000610 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000620 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000630 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000640 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000650 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000660 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000670 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000680 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000690 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000006F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000700 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000710 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000720 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000730 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000740 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000750 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000760 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000770 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000780 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000790 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000007F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000800 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000810 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000820 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000830 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000840 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000850 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000860 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000870 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000880 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000890 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000008F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000900 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000910 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000920 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000930 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000940 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000950 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000960 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000970 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000980 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000990 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000009A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000009B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000009C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000009D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000009E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000009F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A70 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A80 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000A90 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000AA0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000AB0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000AC0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000AD0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000AE0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000AF0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B70 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B80 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000B90 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000BA0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000BB0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000BC0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000BD0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000BE0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000BF0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C70 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C80 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000C90 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000CA0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000CB0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000CC0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000CD0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000CE0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000CF0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D70 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D80 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000D90 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000DA0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000DB0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000DC0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000DD0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000DE0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000DF0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E00 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E10 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E20 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E30 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E40 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E50 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E60 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E70 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E80 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000E90 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000EA0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ + +------------------------------------------------------------------------------- +Entry ID : 00000002 : Resource Fork +Offset : 00000EE2 : 3810 +Length : 0000011E : 286 + +-RAW DUMP--: 0 1 2 3 4 5 6 7 8 9 A B C D E F : (ASCII) +00000000 : 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 1E : ................ +00000010 : 54 68 69 73 20 72 65 73 6F 75 72 63 65 20 66 6F : This resource fo +00000020 : 72 6B 20 69 6E 74 65 6E 74 69 6F 6E 61 6C 6C 79 : rk intentionally +00000030 : 20 6C 65 66 74 20 62 6C 61 6E 6B 20 20 20 00 00 : left blank .. +00000040 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000050 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000060 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000080 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000090 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000A0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000B0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000C0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000D0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000E0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +000000F0 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 : ................ +00000100 : 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 1E : ................ +00000110 : 00 00 00 00 00 00 00 00 00 1C 00 1E FF FF : .............. +*/ + +static char osx_adouble_dir_w_xattr[] = { + 0x00, 0x05, 0x16, 0x07, 0x00, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x63, 0x20, 0x4f, 0x53, 0x20, 0x58, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, + 0x00, 0x32, 0x00, 0x00, 0x0e, 0xb0, 0x00, 0x00, -- Samba Shared Repository