From: Ralph Boehme Date: Tue, 9 Oct 2018 12:54:31 +0000 (+0200) Subject: vfs_fruit: optionally delete AppleDouble files without Resourcefork data X-Git-Tag: tdb-1.3.17~1089 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3649f1a41a299b14609318ef52b44e2d53cba4b5;p=thirdparty%2Fsamba.git vfs_fruit: optionally delete AppleDouble files without Resourcefork data Bug: https://bugzilla.samba.org/show_bug.cgi?id=13642 Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison --- diff --git a/selftest/knownfail.d/samba3.vfs.fruit b/selftest/knownfail.d/samba3.vfs.fruit index 8b9aed48b63..6307e2b3404 100644 --- a/selftest/knownfail.d/samba3.vfs.fruit +++ b/selftest/knownfail.d/samba3.vfs.fruit @@ -1,3 +1,2 @@ ^samba3.vfs.fruit streams_depot.OS X AppleDouble file conversion\(nt4_dc\) ^samba3.vfs.fruit streams_depot.OS X AppleDouble file conversion without embedded xattr\(nt4_dc\) -^samba3.vfs.fruit_conversion delete_empty_adfiles.convert_xattr_and_empty_rfork_then_delete\(nt4_dc\) diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c index 5c872854ed7..6dd0b13bfcc 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; }