diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index fdcf487..7666e73 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1223,7 +1223,11 @@ void reply_setatr(struct smb_request *req) goto out; } - if (mode != FILE_ATTRIBUTE_NORMAL) { + mode &= (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | + FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_TEMPORARY | + FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_NONINDEXED); + + if (mode) { if (VALID_STAT_OF_DIR(smb_fname->st)) mode |= aDIR; else diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 0ee9be3..7794e1c 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -5501,6 +5501,10 @@ static NTSTATUS smb_set_file_dosmode(connection_struct *conn, return status; } + dosmode &= (FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | + FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_TEMPORARY | + FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_NONINDEXED); + if (dosmode) { if (S_ISDIR(smb_fname_base->st.st_ex_mode)) { dosmode |= aDIR;