diff options
| author | Steve French <smfrench@gmail.com> | 2018-02-05 14:46:18 -0600 | 
|---|---|---|
| committer | Steve French <smfrench@gmail.com> | 2018-02-07 09:36:46 -0600 | 
| commit | 5f60a56494ea5518376b274dd93b3ceee9a783fb (patch) | |
| tree | 2c3425ff0181b899cc428808f1eb8a5045439a76 /fs | |
| parent | f9de151bf2b8055563b85ff6896fd86891bbe6c5 (diff) | |
| download | linux-5f60a56494ea5518376b274dd93b3ceee9a783fb.tar.bz2 | |
Add missing structs and defines from recent SMB3.1.1 documentation
The last two updates to MS-SMB2 protocol documentation added various
flags and structs (especially relating to SMB3.1.1 tree connect).
Add missing defines and structs to smb2pdu.h
Signed-off-by: Steve French <smfrench@gmail.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/cifs/smb2pdu.h | 114 | 
1 files changed, 112 insertions, 2 deletions
diff --git a/fs/cifs/smb2pdu.h b/fs/cifs/smb2pdu.h index 6eb9f9691ed4..2a2b34ccaf49 100644 --- a/fs/cifs/smb2pdu.h +++ b/fs/cifs/smb2pdu.h @@ -192,6 +192,35 @@ struct smb2_symlink_err_rsp {  	__u8  PathBuffer[0];  } __packed; +/* SMB 3.1.1 and later dialects. See MS-SMB2 section 2.2.2.1 */ +struct smb2_error_context_rsp { +	__le32 ErrorDataLength; +	__le32 ErrorId; +	__u8  ErrorContextData; /* ErrorDataLength long array */ +} __packed; + +/* Defines for Type field below (see MS-SMB2 2.2.2.2.2.1) */ +#define MOVE_DST_IPADDR_V4	cpu_to_le32(0x00000001) +#define MOVE_DST_IPADDR_V6	cpu_to_le32(0x00000002) + +struct move_dst_ipaddr { +	__le32 Type; +	__u32  Reserved; +	__u8   address[16]; /* IPv4 followed by 12 bytes rsvd or IPv6 address */ +} __packed; + +struct share_redirect_error_context_rsp { +	__le32 StructureSize; +	__le32 NotificationType; +	__le32 ResourceNameOffset; +	__le32 ResourceNameLength; +	__le16 Flags; +	__le16 TargetType; +	__le32 IPAddrCount; +	struct move_dst_ipaddr IpAddrMoveList[0]; +	/* __u8 ResourceName[] */ /* Name of share as counted Unicode string */ +} __packed; +  #define SMB2_CLIENT_GUID_SIZE 16  struct smb2_negotiate_req { @@ -320,7 +349,9 @@ struct smb2_logoff_rsp {  } __packed;  /* Flags/Reserved for SMB3.1.1 */ -#define SMB2_SHAREFLAG_CLUSTER_RECONNECT	0x0001 +#define SMB2_TREE_CONNECT_FLAG_CLUSTER_RECONNECT cpu_to_le16(0x0001) +#define SMB2_TREE_CONNECT_FLAG_REDIRECT_TO_OWNER cpu_to_le16(0x0002) +#define SMB2_TREE_CONNECT_FLAG_EXTENSION_PRESENT cpu_to_le16(0x0004)  struct smb2_tree_connect_req {  	struct smb2_sync_hdr sync_hdr; @@ -331,6 +362,82 @@ struct smb2_tree_connect_req {  	__u8   Buffer[1];	/* variable length */  } __packed; +/* See MS-SMB2 section 2.2.9.2 */ +/* Context Types */ +#define SMB2_RESERVED_TREE_CONNECT_CONTEXT_ID 0x0000 +#define SMB2_REMOTED_IDENTITY_TREE_CONNECT_CONTEXT_ID cpu_to_le16(0x0001) + +struct tree_connect_contexts { +	__le16 ContextType; +	__le16 DataLength; +	__le32 Reserved; +	__u8   Data[0]; +} __packed; + +/* Remoted identity tree connect context structures - see MS-SMB2 2.2.9.2.1 */ +struct smb3_blob_data { +	__le16 BlobSize; +	__u8   BlobData[0]; +} __packed; + +/* Valid values for Attr */ +#define SE_GROUP_MANDATORY		0x00000001 +#define SE_GROUP_ENABLED_BY_DEFAULT	0x00000002 +#define SE_GROUP_ENABLED		0x00000004 +#define SE_GROUP_OWNER			0x00000008 +#define SE_GROUP_USE_FOR_DENY_ONLY	0x00000010 +#define SE_GROUP_INTEGRITY		0x00000020 +#define SE_GROUP_INTEGRITY_ENABLED	0x00000040 +#define SE_GROUP_RESOURCE		0x20000000 +#define SE_GROUP_LOGON_ID		0xC0000000 + +/* struct sid_attr_data is SidData array in BlobData format then le32 Attr */ + +struct sid_array_data { +	__le16 SidAttrCount; +	/* SidAttrList - array of sid_attr_data structs */ +} __packed; + +struct luid_attr_data { + +} __packed; + +/* + * struct privilege_data is the same as BLOB_DATA - see MS-SMB2 2.2.9.2.1.5 + * but with size of LUID_ATTR_DATA struct and BlobData set to LUID_ATTR DATA + */ + +struct privilege_array_data { +	__le16 PrivilegeCount; +	/* array of privilege_data structs */ +} __packed; + +struct remoted_identity_tcon_context { +	__le16 TicketType; /* must be 0x0001 */ +	__le16 TicketSize; /* total size of this struct */ +	__le16 User; /* offset to SID_ATTR_DATA struct with user info */ +	__le16 UserName; /* offset to null terminated Unicode username string */ +	__le16 Domain; /* offset to null terminated Unicode domain name */ +	__le16 Groups; /* offset to SID_ARRAY_DATA struct with group info */ +	__le16 RestrictedGroups; /* similar to above */ +	__le16 Privileges; /* offset to PRIVILEGE_ARRAY_DATA struct */ +	__le16 PrimaryGroup; /* offset to SID_ARRAY_DATA struct */ +	__le16 Owner; /* offset to BLOB_DATA struct */ +	__le16 DefaultDacl; /* offset to BLOB_DATA struct */ +	__le16 DeviceGroups; /* offset to SID_ARRAY_DATA struct */ +	__le16 UserClaims; /* offset to BLOB_DATA struct */ +	__le16 DeviceClaims; /* offset to BLOB_DATA struct */ +	__u8   TicketInfo[0]; /* variable length buf - remoted identity data */ +} __packed; + +struct smb2_tree_connect_req_extension { +	__le32 TreeConnectContextOffset; +	__le16 TreeConnectContextCount; +	__u8  Reserved[10]; +	__u8  PathName[0]; /* variable sized array */ +	/* followed by array of TreeConnectContexts */ +} __packed; +  struct smb2_tree_connect_rsp {  	struct smb2_hdr hdr;  	__le16 StructureSize;	/* Must be 16 */ @@ -365,7 +472,8 @@ struct smb2_tree_connect_rsp {  #define SHI1005_FLAGS_ENABLE_HASH_V1			0x00002000  #define SHI1005_FLAGS_ENABLE_HASH_V2			0x00004000  #define SHI1005_FLAGS_ENCRYPT_DATA			0x00008000 -#define SHI1005_FLAGS_ALL				0x0000FF33 +#define SMB2_SHAREFLAG_IDENTITY_REMOTING		0x00040000 /* 3.1.1 */ +#define SHI1005_FLAGS_ALL				0x0004FF33  /* Possible share capabilities */  #define SMB2_SHARE_CAP_DFS	cpu_to_le32(0x00000008) /* all dialects */ @@ -373,6 +481,7 @@ struct smb2_tree_connect_rsp {  #define SMB2_SHARE_CAP_SCALEOUT	cpu_to_le32(0x00000020) /* 3.0 */  #define SMB2_SHARE_CAP_CLUSTER	cpu_to_le32(0x00000040) /* 3.0 */  #define SMB2_SHARE_CAP_ASYMMETRIC cpu_to_le32(0x00000080) /* 3.02 */ +#define SMB2_SHARE_CAP_REDIRECT_TO_OWNER cpu_to_le32(0x00000100) /* 3.1.1 */  struct smb2_tree_disconnect_req {  	struct smb2_sync_hdr sync_hdr; @@ -556,6 +665,7 @@ struct create_context {  #define SMB2_LEASE_WRITE_CACHING	cpu_to_le32(0x04)  #define SMB2_LEASE_FLAG_BREAK_IN_PROGRESS cpu_to_le32(0x02) +#define SMB2_LEASE_FLAG_PARENT_LEASE_KEY_SET cpu_to_le32(0x00000004)  #define SMB2_LEASE_KEY_SIZE 16  |