files_struct *fsp,
struct smb_filename *smb_fname);
NTSTATUS refuse_symlink_fsp(const struct files_struct *fsp);
-NTSTATUS check_access_fsp(struct files_struct *fsp,
- uint32_t access_mask);
+NTSTATUS check_any_access_fsp(struct files_struct *fsp,
+ uint32_t access_mask);
uint64_t smb_roundup(connection_struct *conn, uint64_t val);
bool samba_private_attr_name(const char *unix_ea_name);
NTSTATUS get_ea_value_fsp(TALLOC_CTX *mem_ctx,
}
/* WRITE_DATA permission is required, WRITE_ATTRIBUTES is not */
- status = check_access_fsp(fsp, FILE_WRITE_DATA);
+ status = check_any_access_fsp(fsp, FILE_WRITE_DATA);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
}
/* WRITE_DATA permission is required */
- status = check_access_fsp(fsp, FILE_WRITE_DATA);
+ status = check_any_access_fsp(fsp, FILE_WRITE_DATA);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
}
/* READ_DATA permission is required */
- status = check_access_fsp(fsp, FILE_READ_DATA);
+ status = check_any_access_fsp(fsp, FILE_READ_DATA);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
return NT_STATUS_OK;
}
-NTSTATUS check_access_fsp(struct files_struct *fsp,
- uint32_t access_mask)
+/**
+ * Check that one or more of the rights in access_mask are
+ * allowed. Iow, access_mask can contain more then one right and
+ * it is sufficient having only one of those granted to pass.
+ **/
+NTSTATUS check_any_access_fsp(struct files_struct *fsp,
+ uint32_t access_mask)
{
if (!fsp->fsp_flags.is_fsa) {
return smbd_check_access_rights_fsp(fsp->conn->cwd_fsp,
return status;
}
- status = check_access_fsp(fsp, FILE_WRITE_EA);
+ status = check_any_access_fsp(fsp, FILE_WRITE_EA);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
return NT_STATUS_INVALID_HANDLE;
}
- status = check_access_fsp(fsp, FILE_WRITE_ATTRIBUTES);
+ status = check_any_access_fsp(fsp, FILE_WRITE_ATTRIBUTES);
if (!NT_STATUS_IS_OK(status)) {
return status;
}
DEBUG(10,("smb_set_info_standard: file %s\n",
smb_fname_str_dbg(smb_fname)));
- status = check_access_fsp(fsp, FILE_WRITE_ATTRIBUTES);
+ status = check_any_access_fsp(fsp, FILE_WRITE_ATTRIBUTES);
if (!NT_STATUS_IS_OK(status)) {
return status;
}