1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
3 <refentry id="vfs_fruit.8">
6 <refentrytitle>vfs_fruit</refentrytitle>
7 <manvolnum>8</manvolnum>
8 <refmiscinfo class="source">Samba</refmiscinfo>
9 <refmiscinfo class="manual">System Administration tools</refmiscinfo>
10 <refmiscinfo class="version">4.7</refmiscinfo>
15 <refname>vfs_fruit</refname>
16 <refpurpose>Enhanced OS X and Netatalk interoperability</refpurpose>
21 <command>vfs objects = fruit</command>
26 <title>DESCRIPTION</title>
28 <para>This VFS module is part of the
29 <citerefentry><refentrytitle>samba</refentrytitle>
30 <manvolnum>7</manvolnum></citerefentry> suite.</para>
32 <para>The <command>vfs_fruit</command> module provides
33 enhanced compatibility with Apple SMB clients and
34 interoperability with a Netatalk 3 AFP fileserver.</para>
36 <para>The module should be stacked with
37 <command>vfs_catia</command> if enabling character conversion and
38 must be stacked with <command>vfs_streams_xattr</command>, see the
39 example section for the correct config.</para>
41 <para>The module enables alternate data streams (ADS) support
42 for a share, intercepts the OS X special streams "AFP_AfpInfo"
43 and "AFP_Resource" and handles them in a special way. All
44 other named streams are deferred to
45 <command>vfs_streams_xattr</command> which must be loaded
46 together with <command>vfs_fruit</command>.</para>
48 <para>Be careful when mixing shares with and without
49 vfs_fruit. OS X clients negotiate SMB2 AAPL protocol
50 extensions on the first tcon, so mixing shares with and
51 without fruit will globally disable AAPL if the first tcon is
54 <para>Having shares with ADS support enabled for OS X client
55 is worthwhile because it resembles the behaviour of Apple's
56 own SMB server implementation and it avoids certain severe
57 performance degradations caused by Samba's case sensitivity
60 <para>The OS X metadata and resource fork stream can be stored
61 in a way compatible with Netatalk 3 by setting
62 <command>fruit:resource = file</command> and
63 <command>fruit:metadata = netatalk</command>.</para>
65 <para>OS X maps NTFS illegal characters to the Unicode private
66 range in SMB requests. By setting <command>fruit:encoding =
67 native</command>, all mapped characters are converted to
68 native ASCII characters.</para>
70 <para>Finally, share access modes are optionally checked
71 against Netatalk AFP sharing modes by setting
72 <command>fruit:locking = netatalk</command>.</para>
74 <para>This module is not stackable other then described in
80 <title>GLOBAL OPTIONS</title>
82 <para>The following options must be set in the global smb.conf section
83 and won't take effect when set per share.</para>
88 <term>fruit:aapl = yes | no</term>
90 <para>A <emphasis>global</emphasis> option whether to enable Apple's SMB2+
91 extension codenamed AAPL. Default
92 <emphasis>yes</emphasis>. This extension enhances
93 several deficiencies when connecting from Macs:</para>
96 <listitem><para>directory enumeration is enriched with
97 Mac relevant filesystem metadata (UNIX mode,
98 FinderInfo, resource fork size and effective
99 permission), as a result the Mac client doesn't need
100 to fetch this metadata individuallly per directory
101 entry resulting in an often tremendous performance
102 increase.</para></listitem>
104 <listitem><para>The ability to query and modify the
105 UNIX mode of directory entries.</para></listitem>
108 <para>There's a set of per share options that come into play when
109 <emphasis>fruit:aapl</emphasis> is enabled. These opions, listed
110 below, can be used to disable the computation of specific Mac
111 metadata in the directory enumeration context, all are enabled by
115 <listitem><para>readdir_attr:aapl_rsize = yes | no</para></listitem>
116 <listitem><para>readdir_attr:aapl_finder_info = yes | no</para></listitem>
117 <listitem><para>readdir_attr:aapl_max_access = yes | no</para></listitem>
120 <para>See below for a description of these options.</para>
126 <term>fruit:nfs_aces = yes | no</term>
128 <para>A <emphasis>global</emphasis> option whether support for
129 querying and modifying the UNIX mode of directory entries via NFS
130 ACEs is enabled, default <emphasis>yes</emphasis>.</para>
135 <term>fruit:copyfile = yes | no</term>
137 <para>A <emphasis>global</emphasis> option whether to enable OS X
138 specific copychunk ioctl that requests a copy of a whole file
139 along with all attached metadata.</para>
140 <para>WARNING: the copyfile request is blocking the
141 client while the server does the copy.</para>.
142 <para>The default is <emphasis>no</emphasis>.</para>
147 <term>fruit:zero_file_id = yes | no</term>
149 <para>A <emphasis>global</emphasis> option whether to return
150 zero to queries of on-disk file identifier, if the client
151 has negotiated AAPL.</para>
152 <para>Mac applications and / or the Mac SMB
153 client code expect the on-disk file identifier to have the
154 semantics of HFS+ Catalog Node Identifier (CNID). Samba
155 doesn't provide those semantics, and that occasionally cause
156 usability issues or even data loss. Returning a file identifier
157 of zero causes the Mac client to stop using and trusting the
158 file id returned from the server.</para>
159 <para>The default is <emphasis>yes</emphasis>.</para>
167 <title>OPTIONS</title>
169 <para>The following options can be set either in the global smb.conf section
175 <term>fruit:resource = [ file | xattr | stream ]</term>
177 <para>Controls where the OS X resource fork is stored.</para>
179 <para>Due to a spelling bug in all Samba versions older then
180 4.6.0, this option can also be given as
181 <emphasis>fruit:ressource</emphasis>, ie with two s.</para>
183 <para>Settings:</para>
186 <listitem><para><command>file (default)</command> - use a ._
187 AppleDouble file compatible with OS X and
188 Netatalk</para></listitem>
190 <listitem><para><command>xattr</command> - use a
191 xattr, requires a filesystem with large xattr support
192 and a file IO API compatible with xattrs, this boils
193 down to Solaris and derived platforms and
194 ZFS</para></listitem>
196 <listitem><para><command>stream (experimental)</command> - pass
197 the stream on to the next module in the VFS stack.
198 <emphasis>Warning: </emphasis> this option should not be used
199 with the <emphasis>streams_xattr</emphasis> module due to the
200 extended attributes size limitations of most
201 filesytems.</para></listitem>
208 <term>fruit:metadata = [ stream | netatalk ]</term>
210 <para>Controls where the OS X metadata stream is stored:</para>
213 <listitem><para><command>netatalk (default)</command> - use
214 Netatalk compatible xattr</para></listitem>
216 <listitem><para><command>stream</command> - pass the
217 stream on to the next module in the VFS
218 stack</para></listitem>
225 <term>fruit:locking = [ netatalk | none ]</term>
229 <listitem><para><command>none (default)</command> - no
230 cross protocol locking</para></listitem>
232 <listitem><para><command>netatalk</command> - use
233 cross protocol locking with Netatalk</para></listitem>
240 <term>fruit:encoding = [ native | private ]</term>
243 <para>Controls how the set of illegal NTFS ASCII
244 character, commonly used by OS X clients, are stored in
245 the filesystem.</para>
247 <para><emphasis>Important:</emphasis> this is known to not fully
248 work with <emphasis>fruit:metadata=stream</emphasis> or
249 <emphasis>fruit:resource=stream</emphasis>.</para>
253 <listitem><para><command>private (default)</command> -
254 store characters as encoded by the OS X client: mapped
255 to the Unicode private range</para></listitem>
257 <listitem><para><command>native</command> - store
258 characters with their native ASCII
259 value. <emphasis>Important</emphasis>: this option
260 requires the use of <emphasis>vfs_catia</emphasis> in
261 the VFS module stack as shown in the examples
262 section.</para></listitem>
269 <term>fruit:veto_appledouble = yes | no</term>
271 <para><emphasis>Note:</emphasis> this option only applies when
272 <parameter>fruit:resource</parameter> is set to
273 <parameter>file</parameter> (the default).</para>
275 <para>When <parameter>fruit:resource</parameter> is set to
276 <parameter>file</parameter>, vfs_fruit may create ._ AppleDouble
277 files. This options controls whether these ._ AppleDouble files
278 are vetoed which prevents the client from accessing them.</para>
279 <para>Vetoing ._ files may break some applications, eg
280 extracting Mac ZIP archives from Mac clients failes,
281 because they contain ._ files. Setting this option to
282 false will fix this, but the abstraction leak of
283 exposing the internally created ._ files may have other
284 unknown side effects.</para>
285 <para>The default is <emphasis>yes</emphasis>.</para>
290 <term>fruit:posix_rename = yes | no</term>
292 <para>Whether to enable POSIX directory rename behaviour
293 for OS X clients. Without this, directories can't be
294 renamed if any client has any file inside it
295 (recursive!) open.</para>
296 <para>The default is <emphasis>yes</emphasis>.</para>
301 <term>readdir_attr:aapl_rsize = yes | no</term>
303 <para>Return resource fork size in SMB2 FIND responses.</para>
304 <para>The default is <emphasis>yes</emphasis>.</para>
309 <term>readdir_attr:aapl_finder_info = yes | no</term>
311 <para>Return FinderInfo in SMB2 FIND responses.</para>
312 <para>The default is <emphasis>yes</emphasis>.</para>
317 <term>readdir_attr:aapl_max_access = yes | no</term>
319 <para>Return the user's effective maximum permissions in SMB2 FIND
320 responses. This is an expensive computation, setting this to off
321 pretends the use has maximum effective permissions.</para>
322 <para>The default is <emphasis>yes</emphasis>.</para>
330 <title>EXAMPLES</title>
333 <smbconfsection name="[share]"/>
334 <smbconfoption name="vfs objects">catia fruit streams_xattr</smbconfoption>
335 <smbconfoption name="fruit:resource">file</smbconfoption>
336 <smbconfoption name="fruit:metadata">netatalk</smbconfoption>
337 <smbconfoption name="fruit:locking">netatalk</smbconfoption>
338 <smbconfoption name="fruit:encoding">native</smbconfoption>
344 <title>AUTHOR</title>
346 <para>The original Samba software and related utilities
347 were created by Andrew Tridgell. Samba is now developed
348 by the Samba Team as an Open Source project similar
349 to the way the Linux kernel is developed.</para>