]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: VFS: media_harmony: Add mh_get_nt_acl_at().
authorJeremy Allison <jra@samba.org>
Mon, 13 Apr 2020 20:59:06 +0000 (13:59 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 7 May 2020 19:27:35 +0000 (19:27 +0000)
Not yet used.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/modules/vfs_media_harmony.c

index f07ebdd6c3d7846d2fbab80814dccccb89fc1972..423bb7ea7a4088cc8f4e16820816f9ebe5deb505 100644 (file)
@@ -1945,6 +1945,70 @@ out:
        return status;
 }
 
+/*
+ * Success: return NT_STATUS_OK
+ * Failure: return NT status error
+ * In this case, "name" is a path.
+ */
+static NTSTATUS mh_get_nt_acl_at(vfs_handle_struct *handle,
+                       struct files_struct *dirfsp,
+                       const struct smb_filename *smb_fname,
+                       uint32_t security_info,
+                       TALLOC_CTX *mem_ctx,
+                       struct security_descriptor **ppdesc)
+{
+       NTSTATUS status;
+       char *clientPath;
+       struct smb_filename *client_smb_fname = NULL;
+       TALLOC_CTX *ctx;
+
+       SMB_ASSERT(dirfsp == handle->conn->cwd_fsp);
+
+       DEBUG(MH_INFO_DEBUG, ("Entering mh_get_nt_acl_at\n"));
+       if (!is_in_media_files(smb_fname->base_name)) {
+               status = SMB_VFS_NEXT_GET_NT_ACL_AT(handle,
+                                       dirfsp,
+                                       smb_fname,
+                                       security_info,
+                                       mem_ctx,
+                                       ppdesc);
+               goto out;
+       }
+
+       clientPath = NULL;
+       ctx = talloc_tos();
+
+       if (alloc_get_client_path(handle, ctx,
+                               smb_fname->base_name,
+                               &clientPath)) {
+               status = map_nt_error_from_unix(errno);
+               goto err;
+       }
+
+       client_smb_fname = synthetic_smb_fname(talloc_tos(),
+                                       clientPath,
+                                       NULL,
+                                       NULL,
+                                       smb_fname->twrp,
+                                       smb_fname->flags);
+       if (client_smb_fname == NULL) {
+               TALLOC_FREE(clientPath);
+               return NT_STATUS_NO_MEMORY;
+       }
+
+       status = SMB_VFS_NEXT_GET_NT_ACL_AT(handle,
+                                       dirfsp,
+                                       client_smb_fname,
+                                       security_info,
+                                       mem_ctx,
+                                       ppdesc);
+err:
+       TALLOC_FREE(clientPath);
+       TALLOC_FREE(client_smb_fname);
+out:
+       return status;
+}
+
 /*
  * Success: return acl pointer
  * Failure: set errno, return NULL
@@ -2230,6 +2294,7 @@ static struct vfs_fn_pointers vfs_mh_fns = {
        /* NT ACL operations. */
 
        .get_nt_acl_fn = mh_get_nt_acl,
+       .get_nt_acl_at_fn = mh_get_nt_acl_at,
 
        /* POSIX ACL operations. */