/* public functions - the api */
-SMB_ACL_T posixacl_sys_acl_get_file(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- SMB_ACL_TYPE_T type,
- TALLOC_CTX *mem_ctx)
-{
- struct smb_acl_t *result;
- acl_type_t acl_type;
- acl_t acl;
-
- switch(type) {
- case SMB_ACL_TYPE_ACCESS:
- acl_type = ACL_TYPE_ACCESS;
- break;
- case SMB_ACL_TYPE_DEFAULT:
- acl_type = ACL_TYPE_DEFAULT;
- break;
- default:
- errno = EINVAL;
- return NULL;
- }
-
- acl = acl_get_file(smb_fname->base_name, acl_type);
-
- if (acl == NULL) {
- return NULL;
- }
-
- result = smb_acl_to_internal(acl, mem_ctx);
- acl_free(acl);
- return result;
-}
-
SMB_ACL_T posixacl_sys_acl_get_fd(vfs_handle_struct *handle,
files_struct *fsp,
SMB_ACL_TYPE_T type,
acl = acl_get_fd(fsp_get_io_fd(fsp));
} else if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *proc_fd_path = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- proc_fd_path = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (proc_fd_path == NULL) {
- return NULL;
- }
-
- acl = acl_get_file(proc_fd_path, acl_type);
+ acl = acl_get_file(sys_proc_fd_path(fd, &buf), acl_type);
} else {
/*
* This is no longer a handle based call.
return result;
}
-int posixacl_sys_acl_set_file(vfs_handle_struct *handle,
- const struct smb_filename *smb_fname,
- SMB_ACL_TYPE_T type,
- SMB_ACL_T theacl)
-{
- int res;
- acl_type_t acl_type;
- acl_t acl;
-
- DEBUG(10, ("Calling acl_set_file: %s, %d\n",
- smb_fname->base_name,
- type));
-
- switch(type) {
- case SMB_ACL_TYPE_ACCESS:
- acl_type = ACL_TYPE_ACCESS;
- break;
- case SMB_ACL_TYPE_DEFAULT:
- acl_type = ACL_TYPE_DEFAULT;
- break;
- default:
- errno = EINVAL;
- return -1;
- }
-
- if ((acl = smb_acl_to_posix(theacl)) == NULL) {
- return -1;
- }
- res = acl_set_file(smb_fname->base_name, acl_type, acl);
- if (res != 0) {
- DEBUG(10, ("acl_set_file failed: %s\n", strerror(errno)));
- }
- acl_free(acl);
- return res;
-}
-
int posixacl_sys_acl_set_fd(vfs_handle_struct *handle,
files_struct *fsp,
SMB_ACL_TYPE_T type,
if (!fsp->fsp_flags.is_pathref && type == SMB_ACL_TYPE_ACCESS) {
res = acl_set_fd(fd, acl);
} else if (fsp->fsp_flags.have_proc_fds) {
- const char *proc_fd_path = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- proc_fd_path = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (proc_fd_path == NULL) {
- acl_free(acl);
- return -1;
- }
- res = acl_set_file(proc_fd_path, acl_type, acl);
+ res = acl_set_file(sys_proc_fd_path(fd, &buf), acl_type, acl);
} else {
/*
* This is no longer a handle based call.
{
if (fsp->fsp_flags.have_proc_fds) {
int fd = fsp_get_pathref_fd(fsp);
- const char *proc_fd_path = NULL;
- char buf[PATH_MAX];
+ struct sys_proc_fd_path_buf buf;
- proc_fd_path = sys_proc_fd_path(fd, buf, sizeof(buf));
- if (proc_fd_path == NULL) {
- return -1;
- }
- return acl_delete_def_file(proc_fd_path);
+ return acl_delete_def_file(sys_proc_fd_path(fd, &buf));
}
/*
/* VFS operations structure */
static struct vfs_fn_pointers posixacl_fns = {
- .sys_acl_get_file_fn = posixacl_sys_acl_get_file,
.sys_acl_get_fd_fn = posixacl_sys_acl_get_fd,
- .sys_acl_blob_get_file_fn = posix_sys_acl_blob_get_file,
.sys_acl_blob_get_fd_fn = posix_sys_acl_blob_get_fd,
.sys_acl_set_fd_fn = posixacl_sys_acl_set_fd,
.sys_acl_delete_def_fd_fn = posixacl_sys_acl_delete_def_fd,