Patch to add support for advertising FULLSYNC to Mac OSX Clients
Kevin Anderson
andersonkw2 at gmail.com
Wed Jul 19 00:45:04 UTC 2017
Hi Ralph,
> I guess that means we're good to go. I'll send a final patchset to the mailing
> list next week.
A user found one issue with the patch which was that it was not respecting
the fruit:time machine option on a per-share level. I have provided an updated
patch, rebased against master, with the only additional change being to honor
the option in a per-share configuration as well as a global configuration.
Thanks,
Kevin Anderson
-------------- next part --------------
diff --git a/docs-xml/manpages/vfs_fruit.8.xml b/docs-xml/manpages/vfs_fruit.8.xml
index 7097aac5a41..a3182c865d6 100644
--- a/docs-xml/manpages/vfs_fruit.8.xml
+++ b/docs-xml/manpages/vfs_fruit.8.xml
@@ -214,6 +214,38 @@
</varlistentry>
<varlistentry>
+ <term>fruit:time machine = [ yes | no ]</term>
+ <listitem>
+ <para>Controls if Time Machine support via the FULLSYNC volume
+ capability is advertised to clients.</para>
+ <itemizedlist>
+ <listitem><para><command>no (default)</command> Disables
+ advertising Time Machine support and the FULLSYNC volume
+ capability to clients.</para></listitem>
+
+ <listitem><para><command>yes</command> - Enables advertising
+ Time Machine support and the FULLSYNC volume capability to
+ clients. This is necessary for supporting Time Machine backups
+ from Mac OSX clients. This value advertises the capability
+ and with the options below, fsync's a file at the request of
+ the client.
+ </para></listitem>
+
+ </itemizedlist>
+
+ <para>This option enforces the following settings per share (or
+ for all shares if enabled globally):</para>
+ <itemizedlist>
+ <listitem><para><command>durable handles = yes</command></para></listitem>
+ <listitem><para><command>kernel oplocks = no</command></para></listitem>
+ <listitem><para><command>kernel share modes = no</command></para></listitem>
+ <listitem><para><command>posix locking = no</command></para></listitem>
+ </itemizedlist>
+
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term>fruit:metadata = [ stream | netatalk ]</term>
<listitem>
<para>Controls where the OS X metadata stream is stored:</para>
diff --git a/libcli/smb/smb2_create_ctx.h b/libcli/smb/smb2_create_ctx.h
index cb194f5c536..0e0b713e55c 100644
--- a/libcli/smb/smb2_create_ctx.h
+++ b/libcli/smb/smb2_create_ctx.h
@@ -42,5 +42,6 @@
/* "AAPL" Volume Capabilities bitmap */
#define SMB2_CRTCTX_AAPL_SUPPORT_RESOLVE_ID 1
#define SMB2_CRTCTX_AAPL_CASE_SENSITIVE 2
+#define SMB2_CRTCTX_AAPL_FULL_SYNC 4
#endif
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index 7c481cdf5f8..33e896dbd86 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -139,6 +139,7 @@ struct fruit_config_data {
bool posix_rename;
bool aapl_zero_file_id;
const char *model;
+ bool time_machine;
/*
* Additional options, all enabled by default,
@@ -1608,6 +1609,9 @@ static int init_fruit_config(vfs_handle_struct *handle)
config->use_aapl = lp_parm_bool(
-1, FRUIT_PARAM_TYPE_NAME, "aapl", true);
+ config->time_machine = lp_parm_bool(
+ SNUM(handle->conn), FRUIT_PARAM_TYPE_NAME, "time machine", false);
+
config->unix_info_enabled = lp_parm_bool(
-1, FRUIT_PARAM_TYPE_NAME, "nfs_aces", true);
@@ -2265,6 +2269,10 @@ static NTSTATUS check_aapl(vfs_handle_struct *handle,
break;
}
+ if (config->time_machine) {
+ caps |= SMB2_CRTCTX_AAPL_FULL_SYNC;
+ }
+
SBVAL(p, 0, caps);
ok = data_blob_append(req, &blob, p, 8);
@@ -2696,6 +2704,14 @@ static int fruit_connect(vfs_handle_struct *handle,
"0x0d:0xf00d");
}
+ if (config->time_machine) {
+ lp_do_parameter(SNUM(handle->conn), "durable handles", "yes");
+ lp_do_parameter(SNUM(handle->conn), "kernel oplocks", "no");
+ lp_do_parameter(SNUM(handle->conn), "kernel share modes", "no");
+ lp_do_parameter(SNUM(handle->conn), "strict sync", "yes");
+ lp_do_parameter(SNUM(handle->conn), "posix locking", "no");
+ }
+
return rc;
}
More information about the samba-technical
mailing list