return map_nt_error_from_unix(errno);
}
-static NTSTATUS gpfsacl_get_nt_acl(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- uint32_t security_info,
- TALLOC_CTX *mem_ctx,
- struct security_descriptor **ppdesc)
-{
- struct SMB4ACL_T *pacl = NULL;
- int result;
- struct gpfs_config_data *config;
- TALLOC_CTX *frame = talloc_stackframe();
- NTSTATUS status;
-
- *ppdesc = NULL;
-
- SMB_VFS_HANDLE_GET_DATA(handle, config,
- struct gpfs_config_data,
- return NT_STATUS_INTERNAL_ERROR);
-
- if (!config->acl) {
- status = SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname,
- security_info,
- mem_ctx, ppdesc);
- TALLOC_FREE(frame);
- return status;
- }
-
- result = gpfs_get_nfs4_acl(frame, smb_fname->base_name, &pacl);
-
- if (result == 0) {
- status = smb_get_nt_acl_nfs4(handle->conn, smb_fname,
- &config->nfs4_params,
- security_info, mem_ctx, ppdesc,
- pacl);
- TALLOC_FREE(frame);
- return status;
- }
-
- if (result > 0) {
- DEBUG(10, ("retrying with posix acl...\n"));
- status = posix_get_nt_acl(handle->conn, smb_fname,
- security_info, mem_ctx, ppdesc);
- TALLOC_FREE(frame);
- return status;
- }
-
- /* GPFS ACL was not read, something wrong happened, error code is set in errno */
- TALLOC_FREE(frame);
- return map_nt_error_from_unix(errno);
-}
-
static NTSTATUS gpfsacl_get_nt_acl_at(vfs_handle_struct *handle,
struct files_struct *dirfsp,
const struct smb_filename *smb_fname,
.set_dos_attributes_fn = vfs_gpfs_set_dos_attributes,
.fset_dos_attributes_fn = vfs_gpfs_fset_dos_attributes,
.fget_nt_acl_fn = gpfsacl_fget_nt_acl,
- .get_nt_acl_fn = gpfsacl_get_nt_acl,
.get_nt_acl_at_fn = gpfsacl_get_nt_acl_at,
.fset_nt_acl_fn = gpfsacl_fset_nt_acl,
.sys_acl_get_file_fn = gpfsacl_sys_acl_get_file,