</listitem>
</varlistentry>
- <varlistentry>
- <term>fruit:zero_file_id = yes | no</term>
- <listitem>
- <para>A <emphasis>global</emphasis> option whether to return
- zero to queries of on-disk file identifier, if the client
- has negotiated AAPL.</para>
- <para>Mac applications and / or the Mac SMB
- client code expect the on-disk file identifier to have the
- semantics of HFS+ Catalog Node Identifier (CNID). Samba
- doesn't provide those semantics, and that occasionally cause
- usability issues or even data loss. Returning a file identifier
- of zero causes the Mac client to stop using and trusting the
- file id returned from the server.</para>
- <para>The default is <emphasis>yes</emphasis>.</para>
- </listitem>
- </varlistentry>
-
<varlistentry>
<term>fruit:model = MacSamba</term>
<listitem>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>fruit:zero_file_id = yes | no</term>
+ <listitem>
+ <para>Whether to return zero to queries of on-disk file
+ identifier if the client has negotiated AAPL.</para>
+ <para>Mac applications and / or the Mac SMB client code expect the
+ on-disk file identifier to have the semantics of HFS+ Catalog Node
+ Identifier (CNID). Samba provides File-IDs based on a file's
+ initial creation date if the option <smbconfoption name="store dos
+ attributes"/> is enabled. Returning a file identifier of
+ zero causes the Mac client to stop using and trusting the file id
+ returned from the server.</para>
+ <para>The default is <emphasis>yes</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</refsect1>
fruit:delete_empty_adfiles = true
fruit:veto_appledouble = no
+[vfs_fruit_zero_fileid]
+ path = $shrdir
+ vfs objects = fruit streams_xattr acl_xattr xattr_tdb
+ fruit:resource = file
+ fruit:metadata = stream
+ fruit:zero_file_id=yes
+
[badname-tmp]
path = $badnames_shrdir
guest ok = yes
SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, "posix_rename", true);
config->aapl_zero_file_id =
- lp_parm_bool(-1, FRUIT_PARAM_TYPE_NAME, "zero_file_id", true);
+ lp_parm_bool(SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME,
+ "zero_file_id", true);
config->readdir_attr_rsize = lp_parm_bool(
SNUM(handle->conn), "readdir_attr", "aapl_rsize", true);
struct fruit_config_data,
return 0);
- if (config->aapl_zero_file_id) {
+ if (global_fruit_config.nego_aapl &&
+ config->aapl_zero_file_id)
+ {
return 0;
}
elif t == "vfs.fruit_timemachine":
plansmbtorture4testsuite(t, "nt4_dc", '//$SERVER_IP/vfs_fruit_timemachine -U$USERNAME%$PASSWORD --option=torture:localdir=$SELFTEST_PREFIX/nt4_dc/share')
elif t == "vfs.fruit_file_id":
- plansmbtorture4testsuite(t, "nt4_dc", '//$SERVER_IP/vfs_fruit -U$USERNAME%$PASSWORD')
+ plansmbtorture4testsuite(t, "nt4_dc", '//$SERVER_IP/vfs_fruit_zero_fileid -U$USERNAME%$PASSWORD')
elif t == "vfs.fruit_conversion":
plansmbtorture4testsuite(t, "nt4_dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --option=torture:share2=vfs_fruit_wipe_intentionally_left_blank_rfork --option=torture:delete_empty_adfiles=false', 'wipe_intentionally_left_blank_rfork')
plansmbtorture4testsuite(t, "nt4_dc", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD --option=torture:share2=vfs_fruit_delete_empty_adfiles --option=torture:delete_empty_adfiles=true', 'delete_empty_adfiles')