int total_data,
files_struct *fsp,
struct smb_filename *smb_fname);
-NTSTATUS refuse_symlink_fsp(const struct files_struct *fsp);
+bool refuse_symlink_fsp(const struct files_struct *fsp);
NTSTATUS check_any_access_fsp(struct files_struct *fsp,
uint32_t access_requested);
uint64_t smb_roundup(connection_struct *conn, uint64_t val);
uint16_t num_def_acls = 0;
unsigned int size_needed = 0;
NTSTATUS status;
- bool ok;
+ bool ok, refuse;
bool close_fsp = false;
/*
SMB_ASSERT(fsp != NULL);
- status = refuse_symlink_fsp(fsp);
- if (!NT_STATUS_IS_OK(status)) {
+ refuse = refuse_symlink_fsp(fsp);
+ if (refuse) {
+ status = NT_STATUS_ACCESS_DENIED;
goto out;
}
unsigned int size_needed;
unsigned int total_data;
bool close_fsp = false;
+ bool refuse;
if (total_data_in < 0) {
status = NT_STATUS_INVALID_PARAMETER;
/* Here we know fsp != NULL */
SMB_ASSERT(fsp != NULL);
- status = refuse_symlink_fsp(fsp);
- if (!NT_STATUS_IS_OK(status)) {
+ refuse = refuse_symlink_fsp(fsp);
+ if (refuse) {
+ status = NT_STATUS_ACCESS_DENIED;
goto out;
}
{
files_struct *sd_fsp = NULL;
NTSTATUS status;
+ bool refuse;
if (!CAN_WRITE(fsp->conn)) {
return NT_STATUS_ACCESS_DENIED;
return NT_STATUS_OK;
}
- status = refuse_symlink_fsp(fsp);
- if (!NT_STATUS_IS_OK(status)) {
+ refuse = refuse_symlink_fsp(fsp);
+ if (refuse) {
DBG_DEBUG("ACL set on symlink %s denied.\n",
fsp_str_dbg(fsp));
- return status;
+ return NT_STATUS_ACCESS_DENIED;
}
if (psd->owner_sid == NULL) {
NTSTATUS status;
struct security_descriptor *psd = NULL;
bool need_to_read_sd = false;
+ bool refuse;
/*
* Get the permissions to return.
}
}
- status = refuse_symlink_fsp(fsp);
- if (!NT_STATUS_IS_OK(status)) {
+ refuse = refuse_symlink_fsp(fsp);
+ if (refuse) {
DBG_DEBUG("ACL get on symlink %s denied.\n",
fsp_str_dbg(fsp));
- return status;
+ return NT_STATUS_ACCESS_DENIED;
}
if (security_info_wanted & (SECINFO_DACL|SECINFO_OWNER|
Check if an open file handle is a symlink.
****************************************************************************/
-NTSTATUS refuse_symlink_fsp(const files_struct *fsp)
+bool refuse_symlink_fsp(const files_struct *fsp)
{
if (!VALID_STAT(fsp->fsp_name->st)) {
- return NT_STATUS_ACCESS_DENIED;
+ return true;
}
if (S_ISLNK(fsp->fsp_name->st.st_ex_mode)) {
- return NT_STATUS_ACCESS_DENIED;
+ return true;
}
if (fsp_get_pathref_fd(fsp) == -1) {
- return NT_STATUS_ACCESS_DENIED;
+ return true;
}
- return NT_STATUS_OK;
+ return false;
}
/**
char *val = NULL;
ssize_t sizeret;
size_t max_xattr_size = 0;
- NTSTATUS status;
+ bool refuse;
if (fsp == NULL) {
return NT_STATUS_INVALID_HANDLE;
}
- status = refuse_symlink_fsp(fsp);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
+ refuse = refuse_symlink_fsp(fsp);
+ if (refuse) {
+ return NT_STATUS_ACCESS_DENIED;
}
max_xattr_size = lp_smbd_max_xattr_size(SNUM(fsp->conn));
}
*pnum_names = 0;
- if ((fsp == NULL) || !NT_STATUS_IS_OK(refuse_symlink_fsp(fsp))) {
+ if ((fsp == NULL) || refuse_symlink_fsp(fsp)) {
/*
* Callers may pass fsp == NULL when passing smb_fname->fsp of a
* symlink. This is ok, handle it here, by just return no EA's
{
NTSTATUS status;
bool posix_pathnames = false;
+ bool refuse;
if (!lp_ea_support(SNUM(conn))) {
return NT_STATUS_EAS_NOT_SUPPORTED;
posix_pathnames = (fsp->fsp_name->flags & SMB_FILENAME_POSIX_PATH);
- status = refuse_symlink_fsp(fsp);
- if (!NT_STATUS_IS_OK(status)) {
- return status;
+ refuse = refuse_symlink_fsp(fsp);
+ if (refuse) {
+ return NT_STATUS_ACCESS_DENIED;
}
status = check_any_access_fsp(fsp, FILE_WRITE_EA);