summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/modules/vfs_fruit.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index b4a14b38756..e8c45f19092 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -1386,6 +1386,43 @@ static bool ad_convert_blank_rfork(struct adouble *ad,
return true;
}
+static bool ad_convert_delete_adfile(struct adouble *ad,
+ const struct smb_filename *smb_fname)
+{
+ struct fruit_config_data *config = NULL;
+ struct smb_filename *ad_name = NULL;
+ int rc;
+
+ if (ad_getentrylen(ad, ADEID_RFORK) > 0) {
+ return true;
+ }
+
+ SMB_VFS_HANDLE_GET_DATA(ad->ad_handle, config,
+ struct fruit_config_data, return false);
+
+ if (!config->delete_empty_adfiles) {
+ return true;
+ }
+
+ rc = adouble_path(talloc_tos(), smb_fname, &ad_name);
+ if (rc != 0) {
+ return false;
+ }
+
+ rc = SMB_VFS_NEXT_UNLINK(ad->ad_handle, ad_name);
+ if (rc != 0) {
+ DBG_ERR("Unlinking [%s] failed: %s\n",
+ smb_fname_str_dbg(ad_name), strerror(errno));
+ TALLOC_FREE(ad_name);
+ return false;
+ }
+
+ DBG_WARNING("Unlinked [%s] after conversion\n", smb_fname_str_dbg(ad_name));
+ TALLOC_FREE(ad_name);
+
+ return true;
+}
+
/**
* Convert from Apple's ._ file to Netatalk
*
@@ -1426,6 +1463,11 @@ static int ad_convert(struct adouble *ad,
return -1;
}
+ ok = ad_convert_delete_adfile(ad, smb_fname);
+ if (!ok) {
+ return -1;
+ }
+
return 0;
}