ksmbd: Use the SMB3_Create definitions from the shared
Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
699230f31b
commit
26a2787d45
@ -713,17 +713,17 @@ static int smb2_get_dos_mode(struct kstat *stat, int attribute)
|
||||
int attr = 0;
|
||||
|
||||
if (S_ISDIR(stat->mode)) {
|
||||
attr = ATTR_DIRECTORY |
|
||||
(attribute & (ATTR_HIDDEN | ATTR_SYSTEM));
|
||||
attr = FILE_ATTRIBUTE_DIRECTORY |
|
||||
(attribute & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM));
|
||||
} else {
|
||||
attr = (attribute & 0x00005137) | ATTR_ARCHIVE;
|
||||
attr &= ~(ATTR_DIRECTORY);
|
||||
attr = (attribute & 0x00005137) | FILE_ATTRIBUTE_ARCHIVE;
|
||||
attr &= ~(FILE_ATTRIBUTE_DIRECTORY);
|
||||
if (S_ISREG(stat->mode) && (server_conf.share_fake_fscaps &
|
||||
FILE_SUPPORTS_SPARSE_FILES))
|
||||
attr |= ATTR_SPARSE;
|
||||
attr |= FILE_ATTRIBUTE_SPARSE_FILE;
|
||||
|
||||
if (smb2_get_reparse_tag_special_file(stat->mode))
|
||||
attr |= ATTR_REPARSE;
|
||||
attr |= FILE_ATTRIBUTE_REPARSE_POINT;
|
||||
}
|
||||
|
||||
return attr;
|
||||
@ -2098,7 +2098,7 @@ static noinline int create_smb2_pipe(struct ksmbd_work *work)
|
||||
rsp->hdr.Status = STATUS_SUCCESS;
|
||||
rsp->StructureSize = cpu_to_le16(89);
|
||||
rsp->OplockLevel = SMB2_OPLOCK_LEVEL_NONE;
|
||||
rsp->Reserved = 0;
|
||||
rsp->Flags = 0;
|
||||
rsp->CreateAction = cpu_to_le32(FILE_OPENED);
|
||||
|
||||
rsp->CreationTime = cpu_to_le64(0);
|
||||
@ -2106,7 +2106,7 @@ static noinline int create_smb2_pipe(struct ksmbd_work *work)
|
||||
rsp->ChangeTime = cpu_to_le64(0);
|
||||
rsp->AllocationSize = cpu_to_le64(0);
|
||||
rsp->EndofFile = cpu_to_le64(0);
|
||||
rsp->FileAttributes = ATTR_NORMAL_LE;
|
||||
rsp->FileAttributes = FILE_ATTRIBUTE_NORMAL_LE;
|
||||
rsp->Reserved2 = 0;
|
||||
rsp->VolatileFileId = cpu_to_le64(id);
|
||||
rsp->PersistentFileId = 0;
|
||||
@ -2352,7 +2352,7 @@ static void smb2_update_xattrs(struct ksmbd_tree_connect *tcon,
|
||||
struct xattr_dos_attrib da;
|
||||
int rc;
|
||||
|
||||
fp->f_ci->m_fattr &= ~(ATTR_HIDDEN_LE | ATTR_SYSTEM_LE);
|
||||
fp->f_ci->m_fattr &= ~(FILE_ATTRIBUTE_HIDDEN_LE | FILE_ATTRIBUTE_SYSTEM_LE);
|
||||
|
||||
/* get FileAttributes from XATTR_NAME_DOS_ATTRIBUTE */
|
||||
if (!test_share_config_flag(tcon->share_conf,
|
||||
@ -2557,7 +2557,7 @@ int smb2_open(struct ksmbd_work *work)
|
||||
if (req_op_level == SMB2_OPLOCK_LEVEL_LEASE)
|
||||
lc = parse_lease_state(req);
|
||||
|
||||
if (le32_to_cpu(req->ImpersonationLevel) > le32_to_cpu(IL_DELEGATE_LE)) {
|
||||
if (le32_to_cpu(req->ImpersonationLevel) > le32_to_cpu(IL_DELEGATE)) {
|
||||
pr_err("Invalid impersonationlevel : 0x%x\n",
|
||||
le32_to_cpu(req->ImpersonationLevel));
|
||||
rc = -EIO;
|
||||
@ -2565,7 +2565,7 @@ int smb2_open(struct ksmbd_work *work)
|
||||
goto err_out1;
|
||||
}
|
||||
|
||||
if (req->CreateOptions && !(req->CreateOptions & CREATE_OPTIONS_MASK)) {
|
||||
if (req->CreateOptions && !(req->CreateOptions & CREATE_OPTIONS_MASK_LE)) {
|
||||
pr_err("Invalid create options : 0x%x\n",
|
||||
le32_to_cpu(req->CreateOptions));
|
||||
rc = -EINVAL;
|
||||
@ -2607,7 +2607,7 @@ int smb2_open(struct ksmbd_work *work)
|
||||
goto err_out1;
|
||||
}
|
||||
|
||||
if (req->FileAttributes && !(req->FileAttributes & ATTR_MASK_LE)) {
|
||||
if (req->FileAttributes && !(req->FileAttributes & FILE_ATTRIBUTE_MASK_LE)) {
|
||||
pr_err("Invalid file attribute : 0x%x\n",
|
||||
le32_to_cpu(req->FileAttributes));
|
||||
rc = -EINVAL;
|
||||
@ -2738,7 +2738,7 @@ int smb2_open(struct ksmbd_work *work)
|
||||
}
|
||||
|
||||
if (req->CreateOptions & FILE_DIRECTORY_FILE_LE &&
|
||||
req->FileAttributes & ATTR_NORMAL_LE) {
|
||||
req->FileAttributes & FILE_ATTRIBUTE_NORMAL_LE) {
|
||||
rsp->hdr.Status = STATUS_NOT_A_DIRECTORY;
|
||||
rc = -EIO;
|
||||
}
|
||||
@ -3117,7 +3117,7 @@ int smb2_open(struct ksmbd_work *work)
|
||||
opinfo = rcu_dereference(fp->f_opinfo);
|
||||
rsp->OplockLevel = opinfo != NULL ? opinfo->level : 0;
|
||||
rcu_read_unlock();
|
||||
rsp->Reserved = 0;
|
||||
rsp->Flags = 0;
|
||||
rsp->CreateAction = cpu_to_le32(file_info);
|
||||
rsp->CreationTime = cpu_to_le64(fp->create_time);
|
||||
time = ksmbd_UnixTimeToNT(stat.atime);
|
||||
@ -3423,9 +3423,9 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
||||
ffdinfo->EaSize =
|
||||
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
|
||||
if (ffdinfo->EaSize)
|
||||
ffdinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
|
||||
ffdinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
|
||||
if (d_info->hide_dot_file && d_info->name[0] == '.')
|
||||
ffdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
|
||||
ffdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
|
||||
memcpy(ffdinfo->FileName, conv_name, conv_len);
|
||||
ffdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
|
||||
break;
|
||||
@ -3439,11 +3439,11 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
||||
fbdinfo->EaSize =
|
||||
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
|
||||
if (fbdinfo->EaSize)
|
||||
fbdinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
|
||||
fbdinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
|
||||
fbdinfo->ShortNameLength = 0;
|
||||
fbdinfo->Reserved = 0;
|
||||
if (d_info->hide_dot_file && d_info->name[0] == '.')
|
||||
fbdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
|
||||
fbdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
|
||||
memcpy(fbdinfo->FileName, conv_name, conv_len);
|
||||
fbdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
|
||||
break;
|
||||
@ -3455,7 +3455,7 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
||||
fdinfo = (struct file_directory_info *)kstat;
|
||||
fdinfo->FileNameLength = cpu_to_le32(conv_len);
|
||||
if (d_info->hide_dot_file && d_info->name[0] == '.')
|
||||
fdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
|
||||
fdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
|
||||
memcpy(fdinfo->FileName, conv_name, conv_len);
|
||||
fdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
|
||||
break;
|
||||
@ -3479,11 +3479,11 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
||||
dinfo->EaSize =
|
||||
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
|
||||
if (dinfo->EaSize)
|
||||
dinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
|
||||
dinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
|
||||
dinfo->Reserved = 0;
|
||||
dinfo->UniqueId = cpu_to_le64(ksmbd_kstat->kstat->ino);
|
||||
if (d_info->hide_dot_file && d_info->name[0] == '.')
|
||||
dinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
|
||||
dinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
|
||||
memcpy(dinfo->FileName, conv_name, conv_len);
|
||||
dinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
|
||||
break;
|
||||
@ -3497,13 +3497,13 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
||||
fibdinfo->EaSize =
|
||||
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
|
||||
if (fibdinfo->EaSize)
|
||||
fibdinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
|
||||
fibdinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
|
||||
fibdinfo->UniqueId = cpu_to_le64(ksmbd_kstat->kstat->ino);
|
||||
fibdinfo->ShortNameLength = 0;
|
||||
fibdinfo->Reserved = 0;
|
||||
fibdinfo->Reserved2 = cpu_to_le16(0);
|
||||
if (d_info->hide_dot_file && d_info->name[0] == '.')
|
||||
fibdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
|
||||
fibdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
|
||||
memcpy(fibdinfo->FileName, conv_name, conv_len);
|
||||
fibdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
|
||||
break;
|
||||
@ -3529,9 +3529,10 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
|
||||
posix_info->Mode = cpu_to_le32(ksmbd_kstat->kstat->mode);
|
||||
posix_info->Inode = cpu_to_le64(ksmbd_kstat->kstat->ino);
|
||||
posix_info->DosAttributes =
|
||||
S_ISDIR(ksmbd_kstat->kstat->mode) ? ATTR_DIRECTORY_LE : ATTR_ARCHIVE_LE;
|
||||
S_ISDIR(ksmbd_kstat->kstat->mode) ?
|
||||
FILE_ATTRIBUTE_DIRECTORY_LE : FILE_ATTRIBUTE_ARCHIVE_LE;
|
||||
if (d_info->hide_dot_file && d_info->name[0] == '.')
|
||||
posix_info->DosAttributes |= ATTR_HIDDEN_LE;
|
||||
posix_info->DosAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
|
||||
id_to_sid(from_kuid_munged(&init_user_ns, ksmbd_kstat->kstat->uid),
|
||||
SIDNFS_USER, (struct smb_sid *)&posix_info->SidBuffer[0]);
|
||||
id_to_sid(from_kgid_munged(&init_user_ns, ksmbd_kstat->kstat->gid),
|
||||
@ -5577,14 +5578,14 @@ static int set_file_basic_info(struct ksmbd_file *fp,
|
||||
|
||||
if (file_info->Attributes) {
|
||||
if (!S_ISDIR(inode->i_mode) &&
|
||||
file_info->Attributes & ATTR_DIRECTORY_LE) {
|
||||
file_info->Attributes & FILE_ATTRIBUTE_DIRECTORY_LE) {
|
||||
pr_err("can't change a file to a directory\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!(S_ISDIR(inode->i_mode) && file_info->Attributes == ATTR_NORMAL_LE))
|
||||
if (!(S_ISDIR(inode->i_mode) && file_info->Attributes == FILE_ATTRIBUTE_NORMAL_LE))
|
||||
fp->f_ci->m_fattr = file_info->Attributes |
|
||||
(fp->f_ci->m_fattr & ATTR_DIRECTORY_LE);
|
||||
(fp->f_ci->m_fattr & FILE_ATTRIBUTE_DIRECTORY_LE);
|
||||
}
|
||||
|
||||
if (test_share_config_flag(share, KSMBD_SHARE_FLAG_STORE_DOS_ATTRS) &&
|
||||
@ -5805,9 +5806,7 @@ static int set_file_mode_info(struct ksmbd_file *fp,
|
||||
|
||||
mode = file_info->Mode;
|
||||
|
||||
if ((mode & ~FILE_MODE_INFO_MASK) ||
|
||||
(mode & FILE_SYNCHRONOUS_IO_ALERT_LE &&
|
||||
mode & FILE_SYNCHRONOUS_IO_NONALERT_LE)) {
|
||||
if ((mode & ~FILE_MODE_INFO_MASK)) {
|
||||
pr_err("Mode is not valid : 0x%x\n", le32_to_cpu(mode));
|
||||
return -EINVAL;
|
||||
}
|
||||
@ -7444,9 +7443,9 @@ static inline int fsctl_set_sparse(struct ksmbd_work *work, u64 id,
|
||||
|
||||
old_fattr = fp->f_ci->m_fattr;
|
||||
if (sparse->SetSparse)
|
||||
fp->f_ci->m_fattr |= ATTR_SPARSE_FILE_LE;
|
||||
fp->f_ci->m_fattr |= FILE_ATTRIBUTE_SPARSE_FILE_LE;
|
||||
else
|
||||
fp->f_ci->m_fattr &= ~ATTR_SPARSE_FILE_LE;
|
||||
fp->f_ci->m_fattr &= ~FILE_ATTRIBUTE_SPARSE_FILE_LE;
|
||||
|
||||
if (fp->f_ci->m_fattr != old_fattr &&
|
||||
test_share_config_flag(work->tcon->share_conf,
|
||||
|
@ -101,157 +101,6 @@ struct preauth_integrity_info {
|
||||
#define SMB2_SESSION_IN_PROGRESS BIT(0)
|
||||
#define SMB2_SESSION_VALID BIT(1)
|
||||
|
||||
#define ATTR_READONLY_LE cpu_to_le32(ATTR_READONLY)
|
||||
#define ATTR_HIDDEN_LE cpu_to_le32(ATTR_HIDDEN)
|
||||
#define ATTR_SYSTEM_LE cpu_to_le32(ATTR_SYSTEM)
|
||||
#define ATTR_DIRECTORY_LE cpu_to_le32(ATTR_DIRECTORY)
|
||||
#define ATTR_ARCHIVE_LE cpu_to_le32(ATTR_ARCHIVE)
|
||||
#define ATTR_NORMAL_LE cpu_to_le32(ATTR_NORMAL)
|
||||
#define ATTR_TEMPORARY_LE cpu_to_le32(ATTR_TEMPORARY)
|
||||
#define ATTR_SPARSE_FILE_LE cpu_to_le32(ATTR_SPARSE)
|
||||
#define ATTR_REPARSE_POINT_LE cpu_to_le32(ATTR_REPARSE)
|
||||
#define ATTR_COMPRESSED_LE cpu_to_le32(ATTR_COMPRESSED)
|
||||
#define ATTR_OFFLINE_LE cpu_to_le32(ATTR_OFFLINE)
|
||||
#define ATTR_NOT_CONTENT_INDEXED_LE cpu_to_le32(ATTR_NOT_CONTENT_INDEXED)
|
||||
#define ATTR_ENCRYPTED_LE cpu_to_le32(ATTR_ENCRYPTED)
|
||||
#define ATTR_INTEGRITY_STREAML_LE cpu_to_le32(0x00008000)
|
||||
#define ATTR_NO_SCRUB_DATA_LE cpu_to_le32(0x00020000)
|
||||
#define ATTR_MASK_LE cpu_to_le32(0x00007FB7)
|
||||
|
||||
/* Oplock levels */
|
||||
#define SMB2_OPLOCK_LEVEL_NONE 0x00
|
||||
#define SMB2_OPLOCK_LEVEL_II 0x01
|
||||
#define SMB2_OPLOCK_LEVEL_EXCLUSIVE 0x08
|
||||
#define SMB2_OPLOCK_LEVEL_BATCH 0x09
|
||||
#define SMB2_OPLOCK_LEVEL_LEASE 0xFF
|
||||
/* Non-spec internal type */
|
||||
#define SMB2_OPLOCK_LEVEL_NOCHANGE 0x99
|
||||
|
||||
/* Desired Access Flags */
|
||||
#define FILE_READ_DATA_LE cpu_to_le32(0x00000001)
|
||||
#define FILE_LIST_DIRECTORY_LE cpu_to_le32(0x00000001)
|
||||
#define FILE_WRITE_DATA_LE cpu_to_le32(0x00000002)
|
||||
#define FILE_ADD_FILE_LE cpu_to_le32(0x00000002)
|
||||
#define FILE_APPEND_DATA_LE cpu_to_le32(0x00000004)
|
||||
#define FILE_ADD_SUBDIRECTORY_LE cpu_to_le32(0x00000004)
|
||||
#define FILE_READ_EA_LE cpu_to_le32(0x00000008)
|
||||
#define FILE_WRITE_EA_LE cpu_to_le32(0x00000010)
|
||||
#define FILE_EXECUTE_LE cpu_to_le32(0x00000020)
|
||||
#define FILE_TRAVERSE_LE cpu_to_le32(0x00000020)
|
||||
#define FILE_DELETE_CHILD_LE cpu_to_le32(0x00000040)
|
||||
#define FILE_READ_ATTRIBUTES_LE cpu_to_le32(0x00000080)
|
||||
#define FILE_WRITE_ATTRIBUTES_LE cpu_to_le32(0x00000100)
|
||||
#define FILE_DELETE_LE cpu_to_le32(0x00010000)
|
||||
#define FILE_READ_CONTROL_LE cpu_to_le32(0x00020000)
|
||||
#define FILE_WRITE_DAC_LE cpu_to_le32(0x00040000)
|
||||
#define FILE_WRITE_OWNER_LE cpu_to_le32(0x00080000)
|
||||
#define FILE_SYNCHRONIZE_LE cpu_to_le32(0x00100000)
|
||||
#define FILE_ACCESS_SYSTEM_SECURITY_LE cpu_to_le32(0x01000000)
|
||||
#define FILE_MAXIMAL_ACCESS_LE cpu_to_le32(0x02000000)
|
||||
#define FILE_GENERIC_ALL_LE cpu_to_le32(0x10000000)
|
||||
#define FILE_GENERIC_EXECUTE_LE cpu_to_le32(0x20000000)
|
||||
#define FILE_GENERIC_WRITE_LE cpu_to_le32(0x40000000)
|
||||
#define FILE_GENERIC_READ_LE cpu_to_le32(0x80000000)
|
||||
#define DESIRED_ACCESS_MASK cpu_to_le32(0xF21F01FF)
|
||||
|
||||
/* ShareAccess Flags */
|
||||
#define FILE_SHARE_READ_LE cpu_to_le32(0x00000001)
|
||||
#define FILE_SHARE_WRITE_LE cpu_to_le32(0x00000002)
|
||||
#define FILE_SHARE_DELETE_LE cpu_to_le32(0x00000004)
|
||||
#define FILE_SHARE_ALL_LE cpu_to_le32(0x00000007)
|
||||
|
||||
/* CreateDisposition Flags */
|
||||
#define FILE_SUPERSEDE_LE cpu_to_le32(0x00000000)
|
||||
#define FILE_OPEN_LE cpu_to_le32(0x00000001)
|
||||
#define FILE_CREATE_LE cpu_to_le32(0x00000002)
|
||||
#define FILE_OPEN_IF_LE cpu_to_le32(0x00000003)
|
||||
#define FILE_OVERWRITE_LE cpu_to_le32(0x00000004)
|
||||
#define FILE_OVERWRITE_IF_LE cpu_to_le32(0x00000005)
|
||||
#define FILE_CREATE_MASK_LE cpu_to_le32(0x00000007)
|
||||
|
||||
#define FILE_READ_DESIRED_ACCESS_LE (FILE_READ_DATA_LE | \
|
||||
FILE_READ_EA_LE | \
|
||||
FILE_GENERIC_READ_LE)
|
||||
#define FILE_WRITE_DESIRE_ACCESS_LE (FILE_WRITE_DATA_LE | \
|
||||
FILE_APPEND_DATA_LE | \
|
||||
FILE_WRITE_EA_LE | \
|
||||
FILE_WRITE_ATTRIBUTES_LE | \
|
||||
FILE_GENERIC_WRITE_LE)
|
||||
|
||||
/* Impersonation Levels */
|
||||
#define IL_ANONYMOUS_LE cpu_to_le32(0x00000000)
|
||||
#define IL_IDENTIFICATION_LE cpu_to_le32(0x00000001)
|
||||
#define IL_IMPERSONATION_LE cpu_to_le32(0x00000002)
|
||||
#define IL_DELEGATE_LE cpu_to_le32(0x00000003)
|
||||
|
||||
/* Create Context Values */
|
||||
#define SMB2_CREATE_EA_BUFFER "ExtA" /* extended attributes */
|
||||
#define SMB2_CREATE_SD_BUFFER "SecD" /* security descriptor */
|
||||
#define SMB2_CREATE_DURABLE_HANDLE_REQUEST "DHnQ"
|
||||
#define SMB2_CREATE_DURABLE_HANDLE_RECONNECT "DHnC"
|
||||
#define SMB2_CREATE_ALLOCATION_SIZE "AlSi"
|
||||
#define SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST "MxAc"
|
||||
#define SMB2_CREATE_TIMEWARP_REQUEST "TWrp"
|
||||
#define SMB2_CREATE_QUERY_ON_DISK_ID "QFid"
|
||||
#define SMB2_CREATE_REQUEST_LEASE "RqLs"
|
||||
#define SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 "DH2Q"
|
||||
#define SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 "DH2C"
|
||||
#define SMB2_CREATE_APP_INSTANCE_ID "\x45\xBC\xA6\x6A\xEF\xA7\xF7\x4A\x90\x08\xFA\x46\x2E\x14\x4D\x74"
|
||||
#define SMB2_CREATE_APP_INSTANCE_VERSION "\xB9\x82\xD0\xB7\x3B\x56\x07\x4F\xA0\x7B\x52\x4A\x81\x16\xA0\x10"
|
||||
#define SVHDX_OPEN_DEVICE_CONTEXT 0x83CE6F1AD851E0986E34401CC9BCFCE9
|
||||
#define SMB2_CREATE_TAG_POSIX "\x93\xAD\x25\x50\x9C\xB4\x11\xE7\xB4\x23\x83\xDE\x96\x8B\xCD\x7C"
|
||||
|
||||
struct smb2_create_req {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 57 */
|
||||
__u8 SecurityFlags;
|
||||
__u8 RequestedOplockLevel;
|
||||
__le32 ImpersonationLevel;
|
||||
__le64 SmbCreateFlags;
|
||||
__le64 Reserved;
|
||||
__le32 DesiredAccess;
|
||||
__le32 FileAttributes;
|
||||
__le32 ShareAccess;
|
||||
__le32 CreateDisposition;
|
||||
__le32 CreateOptions;
|
||||
__le16 NameOffset;
|
||||
__le16 NameLength;
|
||||
__le32 CreateContextsOffset;
|
||||
__le32 CreateContextsLength;
|
||||
__u8 Buffer[0];
|
||||
} __packed;
|
||||
|
||||
struct smb2_create_rsp {
|
||||
struct smb2_hdr hdr;
|
||||
__le16 StructureSize; /* Must be 89 */
|
||||
__u8 OplockLevel;
|
||||
__u8 Reserved;
|
||||
__le32 CreateAction;
|
||||
__le64 CreationTime;
|
||||
__le64 LastAccessTime;
|
||||
__le64 LastWriteTime;
|
||||
__le64 ChangeTime;
|
||||
__le64 AllocationSize;
|
||||
__le64 EndofFile;
|
||||
__le32 FileAttributes;
|
||||
__le32 Reserved2;
|
||||
__le64 PersistentFileId;
|
||||
__le64 VolatileFileId;
|
||||
__le32 CreateContextsOffset;
|
||||
__le32 CreateContextsLength;
|
||||
__u8 Buffer[1];
|
||||
} __packed;
|
||||
|
||||
struct create_context {
|
||||
__le32 Next;
|
||||
__le16 NameOffset;
|
||||
__le16 NameLength;
|
||||
__le16 Reserved;
|
||||
__le16 DataOffset;
|
||||
__le32 DataLength;
|
||||
__u8 Buffer[0];
|
||||
} __packed;
|
||||
|
||||
struct create_durable_req_v2 {
|
||||
struct create_context ccontext;
|
||||
__u8 Name[8];
|
||||
@ -1012,7 +861,7 @@ struct smb2_file_pos_info {
|
||||
__le64 CurrentByteOffset;
|
||||
} __packed;
|
||||
|
||||
#define FILE_MODE_INFO_MASK cpu_to_le32(0x0000103e)
|
||||
#define FILE_MODE_INFO_MASK cpu_to_le32(0x0000100e)
|
||||
|
||||
struct smb2_file_mode_info {
|
||||
__le32 Mode;
|
||||
|
@ -49,21 +49,6 @@
|
||||
/*
|
||||
* File Attribute flags
|
||||
*/
|
||||
#define ATTR_READONLY 0x0001
|
||||
#define ATTR_HIDDEN 0x0002
|
||||
#define ATTR_SYSTEM 0x0004
|
||||
#define ATTR_VOLUME 0x0008
|
||||
#define ATTR_DIRECTORY 0x0010
|
||||
#define ATTR_ARCHIVE 0x0020
|
||||
#define ATTR_DEVICE 0x0040
|
||||
#define ATTR_NORMAL 0x0080
|
||||
#define ATTR_TEMPORARY 0x0100
|
||||
#define ATTR_SPARSE 0x0200
|
||||
#define ATTR_REPARSE 0x0400
|
||||
#define ATTR_COMPRESSED 0x0800
|
||||
#define ATTR_OFFLINE 0x1000
|
||||
#define ATTR_NOT_CONTENT_INDEXED 0x2000
|
||||
#define ATTR_ENCRYPTED 0x4000
|
||||
#define ATTR_POSIX_SEMANTICS 0x01000000
|
||||
#define ATTR_BACKUP_SEMANTICS 0x02000000
|
||||
#define ATTR_DELETE_ON_CLOSE 0x04000000
|
||||
@ -72,23 +57,6 @@
|
||||
#define ATTR_NO_BUFFERING 0x20000000
|
||||
#define ATTR_WRITE_THROUGH 0x80000000
|
||||
|
||||
#define ATTR_READONLY_LE cpu_to_le32(ATTR_READONLY)
|
||||
#define ATTR_HIDDEN_LE cpu_to_le32(ATTR_HIDDEN)
|
||||
#define ATTR_SYSTEM_LE cpu_to_le32(ATTR_SYSTEM)
|
||||
#define ATTR_DIRECTORY_LE cpu_to_le32(ATTR_DIRECTORY)
|
||||
#define ATTR_ARCHIVE_LE cpu_to_le32(ATTR_ARCHIVE)
|
||||
#define ATTR_NORMAL_LE cpu_to_le32(ATTR_NORMAL)
|
||||
#define ATTR_TEMPORARY_LE cpu_to_le32(ATTR_TEMPORARY)
|
||||
#define ATTR_SPARSE_FILE_LE cpu_to_le32(ATTR_SPARSE)
|
||||
#define ATTR_REPARSE_POINT_LE cpu_to_le32(ATTR_REPARSE)
|
||||
#define ATTR_COMPRESSED_LE cpu_to_le32(ATTR_COMPRESSED)
|
||||
#define ATTR_OFFLINE_LE cpu_to_le32(ATTR_OFFLINE)
|
||||
#define ATTR_NOT_CONTENT_INDEXED_LE cpu_to_le32(ATTR_NOT_CONTENT_INDEXED)
|
||||
#define ATTR_ENCRYPTED_LE cpu_to_le32(ATTR_ENCRYPTED)
|
||||
#define ATTR_INTEGRITY_STREAML_LE cpu_to_le32(0x00008000)
|
||||
#define ATTR_NO_SCRUB_DATA_LE cpu_to_le32(0x00020000)
|
||||
#define ATTR_MASK_LE cpu_to_le32(0x00007FB7)
|
||||
|
||||
/* List of FileSystemAttributes - see 2.5.1 of MS-FSCC */
|
||||
#define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */
|
||||
#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup extents */
|
||||
@ -150,11 +118,6 @@
|
||||
/* file_execute, file_read_attributes*/
|
||||
/* write_dac, and delete. */
|
||||
|
||||
#define FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_READ_ATTRIBUTES)
|
||||
#define FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \
|
||||
| FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES)
|
||||
#define FILE_EXEC_RIGHTS (FILE_EXECUTE)
|
||||
|
||||
#define SET_FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA \
|
||||
| FILE_READ_ATTRIBUTES \
|
||||
| DELETE | READ_CONTROL | WRITE_DAC \
|
||||
|
@ -1013,7 +1013,7 @@ int ksmbd_vfs_zero_data(struct ksmbd_work *work, struct ksmbd_file *fp,
|
||||
loff_t off, loff_t len)
|
||||
{
|
||||
smb_break_all_levII_oplock(work, fp, 1);
|
||||
if (fp->f_ci->m_fattr & ATTR_SPARSE_FILE_LE)
|
||||
if (fp->f_ci->m_fattr & FILE_ATTRIBUTE_SPARSE_FILE_LE)
|
||||
return vfs_fallocate(fp->filp,
|
||||
FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
|
||||
off, len);
|
||||
@ -1624,7 +1624,7 @@ void *ksmbd_vfs_init_kstat(char **p, struct ksmbd_kstat *ksmbd_kstat)
|
||||
time = ksmbd_UnixTimeToNT(kstat->ctime);
|
||||
info->ChangeTime = cpu_to_le64(time);
|
||||
|
||||
if (ksmbd_kstat->file_attributes & ATTR_DIRECTORY_LE) {
|
||||
if (ksmbd_kstat->file_attributes & FILE_ATTRIBUTE_DIRECTORY_LE) {
|
||||
info->EndOfFile = 0;
|
||||
info->AllocationSize = 0;
|
||||
} else {
|
||||
@ -1654,9 +1654,9 @@ int ksmbd_vfs_fill_dentry_attrs(struct ksmbd_work *work,
|
||||
* or that acl is disable in server's filesystem and the config is yes.
|
||||
*/
|
||||
if (S_ISDIR(ksmbd_kstat->kstat->mode))
|
||||
ksmbd_kstat->file_attributes = ATTR_DIRECTORY_LE;
|
||||
ksmbd_kstat->file_attributes = FILE_ATTRIBUTE_DIRECTORY_LE;
|
||||
else
|
||||
ksmbd_kstat->file_attributes = ATTR_ARCHIVE_LE;
|
||||
ksmbd_kstat->file_attributes = FILE_ATTRIBUTE_ARCHIVE_LE;
|
||||
|
||||
if (test_share_config_flag(work->tcon->share_conf,
|
||||
KSMBD_SHARE_FLAG_STORE_DOS_ATTRS)) {
|
||||
|
@ -25,48 +25,9 @@ enum {
|
||||
};
|
||||
|
||||
/* CreateOptions */
|
||||
/* Flag is set, it must not be a file , valid for directory only */
|
||||
#define FILE_DIRECTORY_FILE_LE cpu_to_le32(0x00000001)
|
||||
#define FILE_WRITE_THROUGH_LE cpu_to_le32(0x00000002)
|
||||
#define FILE_SEQUENTIAL_ONLY_LE cpu_to_le32(0x00000004)
|
||||
|
||||
/* Should not buffer on server*/
|
||||
#define FILE_NO_INTERMEDIATE_BUFFERING_LE cpu_to_le32(0x00000008)
|
||||
/* MBZ */
|
||||
#define FILE_SYNCHRONOUS_IO_ALERT_LE cpu_to_le32(0x00000010)
|
||||
/* MBZ */
|
||||
#define FILE_SYNCHRONOUS_IO_NONALERT_LE cpu_to_le32(0x00000020)
|
||||
|
||||
/* Flaf must not be set for directory */
|
||||
#define FILE_NON_DIRECTORY_FILE_LE cpu_to_le32(0x00000040)
|
||||
|
||||
/* Should be zero */
|
||||
#define CREATE_TREE_CONNECTION cpu_to_le32(0x00000080)
|
||||
#define FILE_COMPLETE_IF_OPLOCKED_LE cpu_to_le32(0x00000100)
|
||||
#define FILE_NO_EA_KNOWLEDGE_LE cpu_to_le32(0x00000200)
|
||||
#define FILE_OPEN_REMOTE_INSTANCE cpu_to_le32(0x00000400)
|
||||
|
||||
/**
|
||||
* Doc says this is obsolete "open for recovery" flag should be zero
|
||||
* in any case.
|
||||
*/
|
||||
#define CREATE_OPEN_FOR_RECOVERY cpu_to_le32(0x00000400)
|
||||
#define FILE_RANDOM_ACCESS_LE cpu_to_le32(0x00000800)
|
||||
#define FILE_DELETE_ON_CLOSE_LE cpu_to_le32(0x00001000)
|
||||
#define FILE_OPEN_BY_FILE_ID_LE cpu_to_le32(0x00002000)
|
||||
#define FILE_OPEN_FOR_BACKUP_INTENT_LE cpu_to_le32(0x00004000)
|
||||
#define FILE_NO_COMPRESSION_LE cpu_to_le32(0x00008000)
|
||||
|
||||
/* Should be zero*/
|
||||
#define FILE_OPEN_REQUIRING_OPLOCK cpu_to_le32(0x00010000)
|
||||
#define FILE_DISALLOW_EXCLUSIVE cpu_to_le32(0x00020000)
|
||||
#define FILE_RESERVE_OPFILTER_LE cpu_to_le32(0x00100000)
|
||||
#define FILE_OPEN_REPARSE_POINT_LE cpu_to_le32(0x00200000)
|
||||
#define FILE_OPEN_NO_RECALL_LE cpu_to_le32(0x00400000)
|
||||
|
||||
/* Should be zero */
|
||||
#define FILE_OPEN_FOR_FREE_SPACE_QUERY_LE cpu_to_le32(0x00800000)
|
||||
#define CREATE_OPTIONS_MASK cpu_to_le32(0x00FFFFFF)
|
||||
#define CREATE_OPTION_READONLY 0x10000000
|
||||
/* system. NB not sent over wire */
|
||||
#define CREATE_OPTION_SPECIAL 0x20000000
|
||||
|
Loading…
Reference in New Issue
Block a user