]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3/libadouble: use real dirfsp in ad_convert_delete_adfile()
authorRalph Boehme <slow@samba.org>
Fri, 22 Jan 2021 16:12:33 +0000 (17:12 +0100)
committerJeremy Allison <jra@samba.org>
Thu, 28 Jan 2021 08:11:49 +0000 (08:11 +0000)
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/lib/adouble.c

index ac1ea2c3df1d02105e5a0095058b397d29658aad..3be6f353bd8c45b7ed6f16b984b8b223b674db2e 100644 (file)
@@ -1374,7 +1374,10 @@ static bool ad_convert_delete_adfile(vfs_handle_struct *handle,
                                const struct smb_filename *smb_fname,
                                uint32_t flags)
 {
+       struct smb_filename *parent_fname = NULL;
+       struct smb_filename *at_fname = NULL;
        struct smb_filename *ad_name = NULL;
+       NTSTATUS status;
        int rc;
 
        if (ad_getentrylen(ad, ADEID_RFORK) > 0) {
@@ -1390,19 +1393,32 @@ static bool ad_convert_delete_adfile(vfs_handle_struct *handle,
                return false;
        }
 
+       status = parent_pathref(talloc_tos(),
+                               handle->conn->cwd_fsp,
+                               ad_name,
+                               &parent_fname,
+                               &at_fname);
+       TALLOC_FREE(ad_name);
+       if (!NT_STATUS_IS_OK(status)) {
+               return false;
+       }
+
        rc = SMB_VFS_NEXT_UNLINKAT(handle,
-                       handle->conn->cwd_fsp,
-                       ad_name,
+                       parent_fname->fsp,
+                       at_fname,
                        0);
        if (rc != 0) {
-               DBG_ERR("Unlinking [%s] failed: %s\n",
-                       smb_fname_str_dbg(ad_name), strerror(errno));
-               TALLOC_FREE(ad_name);
+               DBG_ERR("Unlinking [%s/%s] failed: %s\n",
+                       smb_fname_str_dbg(parent_fname),
+                       smb_fname_str_dbg(at_fname), strerror(errno));
+               TALLOC_FREE(parent_fname);
                return false;
        }
 
-       DBG_WARNING("Unlinked [%s] after conversion\n", smb_fname_str_dbg(ad_name));
-       TALLOC_FREE(ad_name);
+       DBG_WARNING("Unlinked [%s/%s] after conversion\n",
+                   smb_fname_str_dbg(parent_fname),
+                   smb_fname_str_dbg(at_fname));
+       TALLOC_FREE(parent_fname);
 
        return true;
 }