mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
vfs_gpfs: Implement CAP_DAC_OVERRIDE for fstatat
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15507 Signed-off-by: Christof Schmitt <cs@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org> Autobuild-User(master): Ralph Böhme <slow@samba.org> Autobuild-Date(master): Wed Nov 8 18:42:13 UTC 2023 on atb-devel-224
This commit is contained in:
parent
cbdc16a7cf
commit
963fc353e7
@ -1702,6 +1702,31 @@ static int vfs_gpfs_lstat(struct vfs_handle_struct *handle,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int vfs_gpfs_fstatat(struct vfs_handle_struct *handle,
|
||||
const struct files_struct *dirfsp,
|
||||
const struct smb_filename *smb_fname,
|
||||
SMB_STRUCT_STAT *sbuf,
|
||||
int flags)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = SMB_VFS_NEXT_FSTATAT(handle, dirfsp, smb_fname, sbuf, flags);
|
||||
if (ret == -1 && errno == EACCES) {
|
||||
bool fake_dctime =
|
||||
lp_fake_directory_create_times(SNUM(handle->conn));
|
||||
|
||||
DBG_DEBUG("fstatat for %s failed with EACCES. Trying with "
|
||||
"CAP_DAC_OVERRIDE.\n", dirfsp->fsp_name->base_name);
|
||||
ret = fstatat_with_cap_dac_override(fsp_get_pathref_fd(dirfsp),
|
||||
smb_fname->base_name,
|
||||
sbuf,
|
||||
flags,
|
||||
fake_dctime);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int timespec_to_gpfs_time(
|
||||
struct timespec ts, gpfs_timestruc_t *gt, int idx, int *flags)
|
||||
{
|
||||
@ -2637,6 +2662,7 @@ static struct vfs_fn_pointers vfs_gpfs_fns = {
|
||||
.stat_fn = vfs_gpfs_stat,
|
||||
.fstat_fn = vfs_gpfs_fstat,
|
||||
.lstat_fn = vfs_gpfs_lstat,
|
||||
.fstatat_fn = vfs_gpfs_fstatat,
|
||||
.fntimes_fn = vfs_gpfs_fntimes,
|
||||
.aio_force_fn = vfs_gpfs_aio_force,
|
||||
.sendfile_fn = vfs_gpfs_sendfile,
|
||||
|
Loading…
Reference in New Issue
Block a user