ksmbd: Implement new SMB3 POSIX type
BugLink: https://bugs.launchpad.net/bugs/2106770 commit e8580b4c600e085b3c8e6404392de2f822d4c132 upstream. As SMB3 posix extension specification, Give posix file type to posix mode. https://www.samba.org/~slow/SMB3_POSIX/fscc_posix_extensions.html#posix-file-type-definition Cc: stable@vger.kernel.org Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Manuel Diewald <manuel.diewald@canonical.com> Signed-off-by: Mehmet Basaran <mehmet.basaran@canonical.com>
This commit is contained in:
committed by
Mehmet Basaran
parent
d218b610a3
commit
5525ce5fcb
@@ -3757,6 +3757,26 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
||||
posix_info->DeviceId = cpu_to_le32(ksmbd_kstat->kstat->rdev);
|
||||
posix_info->HardLinks = cpu_to_le32(ksmbd_kstat->kstat->nlink);
|
||||
posix_info->Mode = cpu_to_le32(ksmbd_kstat->kstat->mode & 0777);
|
||||
switch (ksmbd_kstat->kstat->mode & S_IFMT) {
|
||||
case S_IFDIR:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFLNK:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFCHR:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFBLK:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFIFO:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFSOCK:
|
||||
posix_info->Mode |= cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FILETYPE_SHIFT);
|
||||
}
|
||||
|
||||
posix_info->Inode = cpu_to_le64(ksmbd_kstat->kstat->ino);
|
||||
posix_info->DosAttributes =
|
||||
S_ISDIR(ksmbd_kstat->kstat->mode) ?
|
||||
@@ -4945,6 +4965,26 @@ static int find_file_posix_info(struct smb2_query_info_rsp *rsp,
|
||||
file_info->AllocationSize = cpu_to_le64(stat.blocks << 9);
|
||||
file_info->HardLinks = cpu_to_le32(stat.nlink);
|
||||
file_info->Mode = cpu_to_le32(stat.mode & 0777);
|
||||
switch (stat.mode & S_IFMT) {
|
||||
case S_IFDIR:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_DIR << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFLNK:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_SYMLINK << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFCHR:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_CHARDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFBLK:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_BLKDEV << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFIFO:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_FIFO << POSIX_FILETYPE_SHIFT);
|
||||
break;
|
||||
case S_IFSOCK:
|
||||
file_info->Mode |= cpu_to_le32(POSIX_TYPE_SOCKET << POSIX_FILETYPE_SHIFT);
|
||||
}
|
||||
|
||||
file_info->DeviceId = cpu_to_le32(stat.rdev);
|
||||
|
||||
/*
|
||||
|
||||
@@ -485,4 +485,14 @@ static inline void *smb2_get_msg(void *buf)
|
||||
return buf + 4;
|
||||
}
|
||||
|
||||
#define POSIX_TYPE_FILE 0
|
||||
#define POSIX_TYPE_DIR 1
|
||||
#define POSIX_TYPE_SYMLINK 2
|
||||
#define POSIX_TYPE_CHARDEV 3
|
||||
#define POSIX_TYPE_BLKDEV 4
|
||||
#define POSIX_TYPE_FIFO 5
|
||||
#define POSIX_TYPE_SOCKET 6
|
||||
|
||||
#define POSIX_FILETYPE_SHIFT 12
|
||||
|
||||
#endif /* _SMB2PDU_H */
|
||||
|
||||
Reference in New Issue
Block a user