return NT_STATUS_ACCESS_DENIED;
}
- status = smb_fget_nt_acl_nfs4(fsp, NULL, security_info, ppdesc,
- mem_ctx, pacl);
+ status = smb_fget_nt_acl_nfs4(
+ fsp, NULL, security_info, mem_ctx, ppdesc, pacl);
TALLOC_FREE(frame);
return status;
}
-static NTSTATUS aixjfs2_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;
- bool result;
- bool retryPosix = False;
-
- *ppdesc = NULL;
- result = aixjfs2_get_nfs4_acl(mem_ctx,
- smb_fname->base_name,
- &pacl,
- &retryPosix);
- if (retryPosix)
- {
- DEBUG(10, ("retrying with posix acl...\n"));
- return posix_get_nt_acl(handle->conn,
- smb_fname,
- security_info,
- mem_ctx,
- ppdesc);
- }
- if (result==False)
- return NT_STATUS_ACCESS_DENIED;
-
- return smb_get_nt_acl_nfs4(handle->conn,
- smb_fname,
- NULL,
- security_info,
- mem_ctx,
- ppdesc,
- pacl);
-}
-
-static int aixjfs2_sys_acl_blob_get_file(vfs_handle_struct *handle, const char *path_p, TALLOC_CTX *mem_ctx, char **blob_description, DATA_BLOB *blob)
-{
- struct SMB4ACL_T *pacl = NULL;
- bool result;
- bool retryPosix = False;
-
- result = aixjfs2_get_nfs4_acl(mem_ctx, path_p, &pacl, &retryPosix);
- if (retryPosix)
- {
- return posix_sys_acl_blob_get_file(handle, path_p, mem_ctx,
- blob_description, blob);
- }
- /* Now way to linarlise NFS4 ACLs at the moment, but the NT ACL is pretty close in this case */
- errno = ENOSYS;
- return -1;
-}
-
static int aixjfs2_sys_acl_blob_get_fd(vfs_handle_struct *handle, files_struct *fsp, TALLOC_CTX *mem_ctx, char **blob_description, DATA_BLOB *blob)
{
struct SMB4ACL_T *pacl = NULL;
return result;
}
-SMB_ACL_T aixjfs2_sys_acl_get_file(vfs_handle_struct *handle,
- const char *path_p,
- SMB_ACL_TYPE_T type,
- TALLOC_CTX *mem_ctx)
+SMB_ACL_T aixjfs2_sys_acl_get_fd(vfs_handle_struct *handle,
+ files_struct *fsp,
+ SMB_ACL_TYPE_T type,
+ TALLOC_CTX *mem_ctx)
{
acl_type_t aixjfs2_type;
smb_panic("exiting");
}
- return aixjfs2_get_posix_acl(path_p, aixjfs2_type, mem_ctx);
-}
-
-SMB_ACL_T aixjfs2_sys_acl_get_fd(vfs_handle_struct *handle,
- files_struct *fsp, TALLOC_CTX *mem_ctx)
-{
- acl_type_t aixjfs2_type;
- aixjfs2_type.u64 = ACL_AIXC;
-
return aixjfs2_get_posix_acl(fsp->fsp_name->base_name,
aixjfs2_type, mem_ctx);
}
memset(jfs2_ace, 0, entryLen);
jfs2_ace->entryLen = entryLen; /* won't store textual "who" */
- jfs2_ace->aceType = aceprop->aceType; /* only ACCES|DENY supported by jfs2 */
+ jfs2_ace->aceType = aceprop->aceType; /* only ACCESS|DENY supported by jfs2 */
jfs2_ace->aceFlags = aceprop->aceFlags;
jfs2_ace->aceMask = aceprop->aceMask;
jfs2_ace->flags = (aceprop->flags&SMB_ACE4_ID_SPECIAL) ? ACE4_ID_SPECIAL : 0;
if (rc==0)
{
result = smb_set_nt_acl_nfs4(handle,
- fsp, security_info_sent, psd,
+ fsp, NULL, security_info_sent, psd,
aixjfs2_process_smbacl);
} else if (rc==1) { /* assume POSIX ACL - by default... */
result = set_nt_acl(fsp, security_info_sent, psd);
return aixjfs2_set_nt_acl_common(handle, fsp, security_info_sent, psd);
}
-int aixjfs2_sys_acl_set_file(vfs_handle_struct *handle,
- const char *name,
- SMB_ACL_TYPE_T type,
- SMB_ACL_T theacl)
-{
- struct acl *acl_aixc;
- acl_type_t acl_type_info;
- int rc;
-
- DEBUG(10, ("aixjfs2_sys_acl_set_file invoked for %s", name));
-
- rc = aixjfs2_query_acl_support((char *)name, ACL_AIXC, &acl_type_info);
- if (rc) {
- DEBUG(8, ("jfs2_set_nt_acl: AIXC support not found\n"));
- return -1;
- }
-
- acl_aixc = aixacl_smb_to_aixacl(type, theacl);
- if (!acl_aixc)
- return -1;
-
- rc = aclx_put(
- (char *)name,
- SET_ACL, /* set only the ACL, not mode bits */
- acl_type_info,
- acl_aixc,
- acl_aixc->acl_len,
- 0
- );
- if (rc) {
- DEBUG(2, ("aclx_put failed with %s for %s\n",
- strerror(errno), name));
- return -1;
- }
-
- return 0;
-}
-
int aixjfs2_sys_acl_set_fd(vfs_handle_struct *handle,
files_struct *fsp,
+ SMB_ACL_TYPE_T type,
SMB_ACL_T theacl)
{
struct acl *acl_aixc;
acl_type_t acl_type_info;
int rc;
- DEBUG(10, ("aixjfs2_sys_acl_set_fd invoked for %s", fsp_str_dbg(fsp)));
+ DEBUG(10, ("aixjfs2_sys_acl_set_fd invoked for %s\n", fsp_str_dbg(fsp)));
rc = aixjfs2_query_acl_support(fsp->fsp_name->base_name, ACL_AIXC,
&acl_type_info);
return -1;
}
- acl_aixc = aixacl_smb_to_aixacl(SMB_ACL_TYPE_ACCESS, theacl);
+ acl_aixc = aixacl_smb_to_aixacl(type, theacl);
if (!acl_aixc)
return -1;
+ if (fsp->fsp_flags.is_pathref) {
+ /*
+ * This is no longer a handle based call.
+ */
+ return aclx_put(fsp->fsp_name->base_name,
+ SET_ACL,
+ acl_type_info,
+ acl_aixc,
+ acl_aixc->acl_len,
+ 0);
+ }
+
rc = aclx_fput(
- fsp->fh->fd,
+ fsp_get_io_fd(fsp),
SET_ACL, /* set only the ACL, not mode bits */
acl_type_info,
acl_aixc,
return 0;
}
-int aixjfs2_sys_acl_delete_def_file(vfs_handle_struct *handle,
- const char *path)
+int aixjfs2_sys_acl_delete_def_fd(vfs_handle_struct *handle,
+ files_struct *fsp)
{
/* Not available under AIXC ACL */
/* Don't report here any error otherwise */
}
static struct vfs_fn_pointers vfs_aixacl2_fns = {
+ .stat_fn = nfs4_acl_stat,
+ .fstat_fn = nfs4_acl_fstat,
+ .lstat_fn = nfs4_acl_lstat,
+ .fstatat_fn = nfs4_acl_fstatat,
.fget_nt_acl_fn = aixjfs2_fget_nt_acl,
- .get_nt_acl_fn = aixjfs2_get_nt_acl,
.fset_nt_acl_fn = aixjfs2_fset_nt_acl,
- .sys_acl_get_file_fn = aixjfs2_sys_acl_get_file,
.sys_acl_get_fd_fn = aixjfs2_sys_acl_get_fd,
- .sys_acl_blob_get_file_fn = aixjfs2_sys_acl_blob_get_file,
.sys_acl_blob_get_fd_fn = aixjfs2_sys_acl_blob_get_fd,
- .sys_acl_set_file_fn = aixjfs2_sys_acl_set_file,
.sys_acl_set_fd_fn = aixjfs2_sys_acl_set_fd,
- .sys_acl_delete_def_file_fn = aixjfs2_sys_acl_delete_def_file
+ .sys_acl_delete_def_fd_fn = aixjfs2_sys_acl_delete_def_fd
};
-NTSTATUS vfs_aixacl2_init(void);
-NTSTATUS vfs_aixacl2_init(void)
+static_decl_vfs;
+NTSTATUS vfs_aixacl2_init(TALLOC_CTX *ctx)
{
return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, AIXACL2_MODULE_NAME,
&vfs_aixacl2_fns);