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: tdb-1.3.10~710 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36b7cff3188bbc21048c12ec971d9c2ac3666226;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 --- diff --git a/source3/smbd/open.c b/source3/smbd/open.c index 0c46eb1c915..883c6ae46b7 100644 --- a/source3/smbd/open.c +++ b/source3/smbd/open.c @@ -2535,7 +2535,18 @@ 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 + */ + uint32_t attr = 0; + + status = SMB_VFS_GET_DOS_ATTRIBUTES(conn, smb_fname, &attr); + if (NT_STATUS_IS_OK(status)) { + existing_dos_attributes = attr; + } } }