vfs_fruit: fix fruit_chmod() for the fruit:resource!=file case
authorRalph Boehme <slow@samba.org>
Fri, 2 Dec 2016 08:02:27 +0000 (09:02 +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 8ca60af028a7f833d88c9a42fbbc6c1f3f4acbcb..5ad0e9c86b7b957e79014e3556c18128a1ce3294 100644 (file)
@@ -2993,7 +2993,6 @@ static int fruit_chmod(vfs_handle_struct *handle,
        int rc = -1;
        char *adp = NULL;
        struct fruit_config_data *config = NULL;
-       SMB_STRUCT_STAT sb;
        const char *path = smb_fname->base_name;
        struct smb_filename *smb_fname_adp = NULL;
 
@@ -3005,14 +3004,16 @@ static int fruit_chmod(vfs_handle_struct *handle,
        SMB_VFS_HANDLE_GET_DATA(handle, config,
                                struct fruit_config_data, return -1);
 
-       if (config->rsrc == FRUIT_RSRC_XATTR) {
+       if (config->rsrc != FRUIT_RSRC_ADFILE) {
                return 0;
        }
 
-       /* FIXME: direct sys_lstat(), missing smb_fname */
-       rc = sys_lstat(path, &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(), path, &adp);