summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2015-05-09 08:31:24 +0200
committerKarolin Seeger <kseeger@samba.org>2015-06-20 20:51:16 +0200
commit3d1df8d54c2c1142a499f5d80aa88393b4804052 (patch)
tree35e3842648f76d7cee2bcd7c7e486b40874f4e45
parent3209575c7f031299cc622d1ca5a5a6de4f5c34c1 (diff)
downloadsamba-3d1df8d54c2c1142a499f5d80aa88393b4804052.tar.gz
vfs_fruit: add option veto_appledouble
vfs_fruit adds a wildcard path "._*" to the vetolist in order to prevent client access to ._ AppleDouble files created internally by vfs_fruit for storing the Mac resource fork stream. Unfortunately there are legitimite use cases where an OS X client may want to use such filenames, extracting ZIP archives (where the archive contains ._ files) being one of them. A possible simple solution to this problem would be to not veto ._ files in the first place, even though that exposes internally created ._ files which the client shouldn't be able to access. Bug: https://bugzilla.samba.org/show_bug.cgi?id=11305 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> Autobuild-User(master): Ralph Böhme <slow@samba.org> Autobuild-Date(master): Tue Jun 9 14:48:14 CEST 2015 on sn-devel-104 (cherry picked from commit b26a1449a0e6d01d5ddca89547df739732c8a230)
-rw-r--r--docs-xml/manpages/vfs_fruit.8.xml17
-rw-r--r--source3/modules/vfs_fruit.c48
2 files changed, 45 insertions, 20 deletions
diff --git a/docs-xml/manpages/vfs_fruit.8.xml b/docs-xml/manpages/vfs_fruit.8.xml
index 4e296a42130..e407b54ad1c 100644
--- a/docs-xml/manpages/vfs_fruit.8.xml
+++ b/docs-xml/manpages/vfs_fruit.8.xml
@@ -197,6 +197,23 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>fruit:veto_appledouble = yes | no</term>
+ <listitem>
+ <para>Whether ._ AppleDouble files are vetoed which
+ prevents the client from seing and accessing internal
+ AppleDouble files created by vfs_fruit itself for the
+ purpose of storing a Mac resource fork.</para>
+ <para>Vetoing ._ files may break some applications, eg
+ extracting Mac ZIP archives from Mac clients failes,
+ because they contain ._ files. Setting this option to
+ false will fix this, but the abstraction leak of
+ exposing the internally created ._ files may have other
+ unknown side effects.</para>
+ <para>The default is <emphasis>yes</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</refsect1>
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index adf283b124d..8f0c4f8f2be 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -125,6 +125,7 @@ struct fruit_config_data {
bool use_aapl;
bool readdir_attr_enabled;
bool unix_info_enabled;
+ bool veto_appledouble;
/*
* Additional options, all enabled by default,
@@ -1332,6 +1333,11 @@ static int init_fruit_config(vfs_handle_struct *handle)
}
config->encoding = (enum fruit_encoding)enumval;
+ if (lp_parm_bool(SNUM(handle->conn),
+ FRUIT_PARAM_TYPE_NAME, "veto_appledouble", true)) {
+ config->veto_appledouble = true;
+ }
+
if (lp_parm_bool(-1, FRUIT_PARAM_TYPE_NAME, "aapl", true)) {
config->use_aapl = true;
}
@@ -2012,26 +2018,6 @@ static int fruit_connect(vfs_handle_struct *handle,
return rc;
}
- list = lp_veto_files(talloc_tos(), SNUM(handle->conn));
-
- if (list) {
- if (strstr(list, "/" ADOUBLE_NAME_PREFIX "*/") == NULL) {
- newlist = talloc_asprintf(
- list,
- "%s/" ADOUBLE_NAME_PREFIX "*/",
- list);
- lp_do_parameter(SNUM(handle->conn),
- "veto files",
- newlist);
- }
- } else {
- lp_do_parameter(SNUM(handle->conn),
- "veto files",
- "/" ADOUBLE_NAME_PREFIX "*/");
- }
-
- TALLOC_FREE(list);
-
rc = init_fruit_config(handle);
if (rc != 0) {
return rc;
@@ -2040,6 +2026,28 @@ static int fruit_connect(vfs_handle_struct *handle,
SMB_VFS_HANDLE_GET_DATA(handle, config,
struct fruit_config_data, return -1);
+ if (config->veto_appledouble) {
+ list = lp_veto_files(talloc_tos(), SNUM(handle->conn));
+
+ if (list) {
+ if (strstr(list, "/" ADOUBLE_NAME_PREFIX "*/") == NULL) {
+ newlist = talloc_asprintf(
+ list,
+ "%s/" ADOUBLE_NAME_PREFIX "*/",
+ list);
+ lp_do_parameter(SNUM(handle->conn),
+ "veto files",
+ newlist);
+ }
+ } else {
+ lp_do_parameter(SNUM(handle->conn),
+ "veto files",
+ "/" ADOUBLE_NAME_PREFIX "*/");
+ }
+
+ TALLOC_FREE(list);
+ }
+
if (config->encoding == FRUIT_ENC_NATIVE) {
lp_do_parameter(
SNUM(handle->conn),