From: Björn Jacke Date: Thu, 4 Mar 2021 18:37:37 +0000 (+0100) Subject: dosmode: retry reading dos attributes as root for unreadable files X-Git-Tag: tevent-0.11.0~1395 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4288319770bc1bde28b1e9ac4bb287e29853378d;p=thirdparty%2Fsamba.git 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 --- diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c index 15676e00851..aaa0924cb9d 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",