From: Ralph Boehme Date: Thu, 23 Jun 2016 10:24:33 +0000 (+0200) Subject: s3/smbd: only use stored dos attributes for open_match_attributes() check X-Git-Tag: samba-4.3.12~108 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17dc1997bf7a90ca19f77c2d6966d410d12d512c;p=thirdparty%2Fsamba.git s3/smbd: only use stored dos attributes for open_match_attributes() check This changes the way we check for old vs new DOS attributes on open with overwrite: only check against the DOS attributes actually set by a client and stored in the DOS attributes xattr. With this change "hide dot files" and "hide files" continue to work with "store dos attributes = yes". Bug: https://bugzilla.samba.org/show_bug.cgi?id=11992 Signed-off-by: Ralph Boehme Reviewed-by: Jeremy Allison (cherry picked from commit 36b7cff3188bbc21048c12ec971d9c2ac3666226) --- diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 5cf0f44143f..0a6ec0df99b 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -2517,7 +2517,19 @@ static NTSTATUS open_file_ntcreate(connection_struct *conn, if (!posix_open) { new_dos_attributes &= SAMBA_ATTRIBUTES_MASK; if (file_existed) { - existing_dos_attributes = dos_mode(conn, smb_fname); + /* + * Only use strored DOS attributes for checks + * against requested attributes (below via + * open_match_attributes()), cf bug #11992 + * for details. -slow + */ + bool ok; + uint32_t attr = 0; + + ok = get_ea_dos_attribute(conn, smb_fname, &attr); + if (ok) { + existing_dos_attributes = attr; + } } }