From 4288319770bc1bde28b1e9ac4bb287e29853378d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Jacke?= Date: Thu, 4 Mar 2021 19:37:37 +0100 Subject: [PATCH] dosmode: retry reading dos attributes as root for unreadable files if there are files that the user can't access, he is still allowed to read the dos attributes information, so we need to try reading them as root also. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14654 Signed-off-by: Bjoern Jacke Reviewed-by: Ralph Boehme Reviewed-by: Jeremy Allison (cherry picked from commit 4288319770bc1bde28b1e9ac4bb287e29853378d) --- source3/smbd/dosmode.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index 15676e008510..aaa0924cb9db 100644 --- a/source3/smbd/dosmode.c +++ b/source3/smbd/dosmode.c @@ -382,6 +382,19 @@ NTSTATUS fget_ea_dos_attribute(struct files_struct *fsp, SAMBA_XATTR_DOS_ATTRIB, attrstr, sizeof(attrstr)); + if (sizeret == -1 && ( errno == EPERM || errno == EACCES )) { + /* we may also retrieve dos attribs for unreadable files, this + is why we'll retry as root. We don't use root in the first + run because in cases like NFS, root might have even less + rights than the real user + */ + become_root(); + sizeret = SMB_VFS_FGETXATTR(fsp->base_fsp ? fsp->base_fsp : fsp, + SAMBA_XATTR_DOS_ATTRIB, + attrstr, + sizeof(attrstr)); + unbecome_root(); + } if (sizeret == -1) { DBG_INFO("Cannot get attribute " "from EA on file %s: Error = %s\n", -- 2.25.1