]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
vfs_fruit: fix fruit_chown() for the fruit:resource!=file case
authorRalph Boehme <slow@samba.org>
Fri, 2 Dec 2016 08:04:37 +0000 (09:04 +0100)
committerUri Simchoni <uri@samba.org>
Wed, 1 Mar 2017 23:32:21 +0000 (00:32 +0100)
The following code must only be executed for the fruit:resource=file
case.

While at it, remove an unnecessary lstat, use the stat info from
smb_fname.

Otherwise no change in behaviour for the fruit:resource=file case (the
default).

BUG: https://bugzilla.samba.org/show_bug.cgi?id=12427

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Uri Simchoni <uri@samba.org>
source3/modules/vfs_fruit.c

index 5ad0e9c86b7b957e79014e3556c18128a1ce3294..a305adad4105eda3cf0643dfb60f01a28d76fd91 100644 (file)
@@ -3053,7 +3053,6 @@ static int fruit_chown(vfs_handle_struct *handle,
        char *adp = NULL;
        struct fruit_config_data *config = NULL;
        struct smb_filename *adp_smb_fname = NULL;
-       SMB_STRUCT_STAT sb;
 
        rc = SMB_VFS_NEXT_CHOWN(handle, smb_fname, uid, gid);
        if (rc != 0) {
@@ -3063,14 +3062,16 @@ static int fruit_chown(vfs_handle_struct *handle,
        SMB_VFS_HANDLE_GET_DATA(handle, config,
                                struct fruit_config_data, return -1);
 
-       if (config->rsrc == FRUIT_RSRC_XATTR) {
-               return rc;
+       if (config->rsrc != FRUIT_RSRC_ADFILE) {
+               return 0;
        }
 
-       /* FIXME: direct sys_lstat(), need non-const smb_fname */
-       rc = sys_lstat(smb_fname->base_name, &sb, false);
-       if (rc != 0 || !S_ISREG(sb.st_ex_mode)) {
-               return rc;
+       if (!VALID_STAT(smb_fname->st)) {
+               return 0;
+       }
+
+       if (!S_ISREG(smb_fname->st.st_ex_mode)) {
+               return 0;
        }
 
        rc = adouble_path(talloc_tos(), smb_fname->base_name, &adp);