diff options
Diffstat (limited to 'usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c')
-rw-r--r-- | usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c b/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c index 304eb93a39..1b9ed07060 100644 --- a/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c +++ b/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c @@ -21,6 +21,7 @@ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2020 Tintri by DDN, Inc. All rights reserved. + * Copyright 2022 RackTop Systems, Inc. */ /* @@ -62,9 +63,19 @@ smb_set_basic_info(smb_request_t *sr, smb_setinfo_t *si) &crtime, &atime, &mtime, &ctime, &attributes) != 0) return (NT_STATUS_INFO_LENGTH_MISMATCH); - if ((attributes & FILE_ATTRIBUTE_DIRECTORY) && - (!smb_node_is_dir(node))) - return (NT_STATUS_INVALID_PARAMETER); + /* + * MS-FSA 2.1.5.14.2 FileBasicInformation + * Return STATUS_INVALID_PARAMETER if: + * FILE_ATTRIBUTE_TEMPORARY on a directory, + * FILE_ATTRIBUTE_DIRECTORY on a non-directory. + */ + if (smb_node_is_dir(node)) { + if ((attributes & FILE_ATTRIBUTE_TEMPORARY) != 0) + return (NT_STATUS_INVALID_PARAMETER); + } else { + if ((attributes & FILE_ATTRIBUTE_DIRECTORY) != 0) + return (NT_STATUS_INVALID_PARAMETER); + } bzero(attr, sizeof (*attr)); if (atime != 0 && atime != (uint64_t)-1) { |