📄 cifspdu.h
字号:
/* * fs/cifs/cifspdu.h * * Copyright (c) International Business Machines Corp., 2002,2007 * Author(s): Steve French (sfrench@us.ibm.com) * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#ifndef _CIFSPDU_H#define _CIFSPDU_H#include <net/sock.h>#ifdef CONFIG_CIFS_WEAK_PW_HASH#define LANMAN_PROT 0#define LANMAN2_PROT 1#define CIFS_PROT 2#else#define CIFS_PROT 0#endif#define POSIX_PROT CIFS_PROT+1#define BAD_PROT 0xFFFF/* SMB command codes *//* * Some commands have minimal (wct=0,bcc=0), or uninteresting, responses * (ie which include no useful data other than the SMB error code itself). * Knowing this helps avoid response buffer allocations and copy in some cases */#define SMB_COM_CREATE_DIRECTORY 0x00 /* trivial response */#define SMB_COM_DELETE_DIRECTORY 0x01 /* trivial response */#define SMB_COM_CLOSE 0x04 /* triv req/rsp, timestamp ignored */#define SMB_COM_DELETE 0x06 /* trivial response */#define SMB_COM_RENAME 0x07 /* trivial response */#define SMB_COM_QUERY_INFORMATION 0x08 /* aka getattr */#define SMB_COM_SETATTR 0x09 /* trivial response */#define SMB_COM_LOCKING_ANDX 0x24 /* trivial response */#define SMB_COM_COPY 0x29 /* trivial rsp, fail filename ignrd*/#define SMB_COM_OPEN_ANDX 0x2D /* Legacy open for old servers */#define SMB_COM_READ_ANDX 0x2E#define SMB_COM_WRITE_ANDX 0x2F#define SMB_COM_TRANSACTION2 0x32#define SMB_COM_TRANSACTION2_SECONDARY 0x33#define SMB_COM_FIND_CLOSE2 0x34 /* trivial response */#define SMB_COM_TREE_DISCONNECT 0x71 /* trivial response */#define SMB_COM_NEGOTIATE 0x72#define SMB_COM_SESSION_SETUP_ANDX 0x73#define SMB_COM_LOGOFF_ANDX 0x74 /* trivial response */#define SMB_COM_TREE_CONNECT_ANDX 0x75#define SMB_COM_NT_TRANSACT 0xA0#define SMB_COM_NT_TRANSACT_SECONDARY 0xA1#define SMB_COM_NT_CREATE_ANDX 0xA2#define SMB_COM_NT_CANCEL 0xA4 /* no response */#define SMB_COM_NT_RENAME 0xA5 /* trivial response *//* Transact2 subcommand codes */#define TRANS2_OPEN 0x00#define TRANS2_FIND_FIRST 0x01#define TRANS2_FIND_NEXT 0x02#define TRANS2_QUERY_FS_INFORMATION 0x03#define TRANS2_SET_FS_INFORMATION 0x04#define TRANS2_QUERY_PATH_INFORMATION 0x05#define TRANS2_SET_PATH_INFORMATION 0x06#define TRANS2_QUERY_FILE_INFORMATION 0x07#define TRANS2_SET_FILE_INFORMATION 0x08#define TRANS2_GET_DFS_REFERRAL 0x10#define TRANS2_REPORT_DFS_INCOSISTENCY 0x11/* NT Transact subcommand codes */#define NT_TRANSACT_CREATE 0x01#define NT_TRANSACT_IOCTL 0x02#define NT_TRANSACT_SET_SECURITY_DESC 0x03#define NT_TRANSACT_NOTIFY_CHANGE 0x04#define NT_TRANSACT_RENAME 0x05#define NT_TRANSACT_QUERY_SECURITY_DESC 0x06#define NT_TRANSACT_GET_USER_QUOTA 0x07#define NT_TRANSACT_SET_USER_QUOTA 0x08#define MAX_CIFS_SMALL_BUFFER_SIZE 448 /* big enough for most *//* future chained NTCreateXReadX bigger, but for time being NTCreateX biggest *//* among the requests (NTCreateX response is bigger with wct of 34) */#define MAX_CIFS_HDR_SIZE 0x58 /* 4 len + 32 hdr + (2*24 wct) + 2 bct + 2 pad */#define CIFS_SMALL_PATH 120 /* allows for (448-88)/3 *//* internal cifs vfs structures *//***************************************************************** * All constants go here ***************************************************************** */#ifndef __le16#define __le16 __u16#define __le32 __u32#define __le64 __u64#define __be16 __u16#define __be32 __u32#define __be64 __u64#endif/* * Starting value for maximum SMB size negotiation */#define CIFS_MAX_MSGSIZE (4*4096)/* * Size of encrypted user password in bytes */#define CIFS_ENCPWD_SIZE (16)/* * Size of the crypto key returned on the negotiate SMB in bytes */#define CIFS_CRYPTO_KEY_SIZE (8)/* * Size of the session key (crypto key encrypted with the password */#define CIFS_SESS_KEY_SIZE (24)/* * Maximum user name length */#define CIFS_UNLEN (20)/* * Flags on SMB open */#define SMBOPEN_WRITE_THROUGH 0x4000#define SMBOPEN_DENY_ALL 0x0010#define SMBOPEN_DENY_WRITE 0x0020#define SMBOPEN_DENY_READ 0x0030#define SMBOPEN_DENY_NONE 0x0040#define SMBOPEN_READ 0x0000#define SMBOPEN_WRITE 0x0001#define SMBOPEN_READWRITE 0x0002#define SMBOPEN_EXECUTE 0x0003#define SMBOPEN_OCREATE 0x0010#define SMBOPEN_OTRUNC 0x0002#define SMBOPEN_OAPPEND 0x0001/* * SMB flag definitions */#define SMBFLG_EXTD_LOCK 0x01 /* server supports lock-read write-unlock smb */#define SMBFLG_RCV_POSTED 0x02 /* obsolete */#define SMBFLG_RSVD 0x04#define SMBFLG_CASELESS 0x08 /* all pathnames treated as caseless (off implies case sensitive file handling request) */#define SMBFLG_CANONICAL_PATH_FORMAT 0x10 /* obsolete */#define SMBFLG_OLD_OPLOCK 0x20 /* obsolete */#define SMBFLG_OLD_OPLOCK_NOTIFY 0x40 /* obsolete */#define SMBFLG_RESPONSE 0x80 /* this PDU is a response from server *//* * SMB flag2 definitions */#define SMBFLG2_KNOWS_LONG_NAMES cpu_to_le16(1) /* can send long (non-8.3) path names in response */#define SMBFLG2_KNOWS_EAS cpu_to_le16(2)#define SMBFLG2_SECURITY_SIGNATURE cpu_to_le16(4)#define SMBFLG2_IS_LONG_NAME cpu_to_le16(0x40)#define SMBFLG2_EXT_SEC cpu_to_le16(0x800)#define SMBFLG2_DFS cpu_to_le16(0x1000)#define SMBFLG2_PAGING_IO cpu_to_le16(0x2000)#define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000)#define SMBFLG2_UNICODE cpu_to_le16(0x8000)/* * These are the file access permission bits defined in CIFS for the * NTCreateAndX as well as the level 0x107 * TRANS2_QUERY_PATH_INFORMATION API. The level 0x107, SMB_QUERY_FILE_ALL_INFO * responds with the AccessFlags. * The AccessFlags specifies the access permissions a caller has to the * file and can have any suitable combination of the following values: */#define FILE_READ_DATA 0x00000001 /* Data can be read from the file */#define FILE_WRITE_DATA 0x00000002 /* Data can be written to the file */#define FILE_APPEND_DATA 0x00000004 /* Data can be appended to the file */#define FILE_READ_EA 0x00000008 /* Extended attributes associated */ /* with the file can be read */#define FILE_WRITE_EA 0x00000010 /* Extended attributes associated */ /* with the file can be written */#define FILE_EXECUTE 0x00000020 /*Data can be read into memory from */ /* the file using system paging I/O */#define FILE_DELETE_CHILD 0x00000040#define FILE_READ_ATTRIBUTES 0x00000080 /* Attributes associated with the */ /* file can be read */#define FILE_WRITE_ATTRIBUTES 0x00000100 /* Attributes associated with the */ /* file can be written */#define DELETE 0x00010000 /* The file can be deleted */#define READ_CONTROL 0x00020000 /* The access control list and */ /* ownership associated with the */ /* file can be read */#define WRITE_DAC 0x00040000 /* The access control list and */ /* ownership associated with the */ /* file can be written. */#define WRITE_OWNER 0x00080000 /* Ownership information associated */ /* with the file can be written */#define SYNCHRONIZE 0x00100000 /* The file handle can waited on to */ /* synchronize with the completion */ /* of an input/output request */#define GENERIC_ALL 0x10000000#define GENERIC_EXECUTE 0x20000000#define GENERIC_WRITE 0x40000000#define GENERIC_READ 0x80000000 /* In summary - Relevant file */ /* access flags from CIFS are */ /* file_read_data, file_write_data */ /* file_execute, file_read_attributes*/ /* write_dac, and delete. *//* * Invalid readdir handle */#define CIFS_NO_HANDLE 0xFFFF#define NO_CHANGE_64 cpu_to_le64(0xFFFFFFFFFFFFFFFFULL)#define NO_CHANGE_32 0xFFFFFFFFUL/* IPC$ in ASCII */#define CIFS_IPC_RESOURCE "\x49\x50\x43\x24"/* IPC$ in Unicode */#define CIFS_IPC_UNICODE_RESOURCE "\x00\x49\x00\x50\x00\x43\x00\x24\x00\x00"/* Unicode Null terminate 2 bytes of 0 */#define UNICODE_NULL "\x00\x00"#define ASCII_NULL 0x00/* * Server type values (returned on EnumServer API */#define CIFS_SV_TYPE_DC 0x00000008#define CIFS_SV_TYPE_BACKDC 0x00000010/* * Alias type flags (From EnumAlias API call */#define CIFS_ALIAS_TYPE_FILE 0x0001#define CIFS_SHARE_TYPE_FILE 0x0000/* * 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 /* ie file not immediately available - on offline storage */#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#define ATTR_SEQUENTIAL_SCAN 0x08000000#define ATTR_RANDOM_ACCESS 0x10000000#define ATTR_NO_BUFFERING 0x20000000#define ATTR_WRITE_THROUGH 0x80000000/* ShareAccess flags */#define FILE_NO_SHARE 0x00000000#define FILE_SHARE_READ 0x00000001#define FILE_SHARE_WRITE 0x00000002#define FILE_SHARE_DELETE 0x00000004#define FILE_SHARE_ALL 0x00000007/* CreateDisposition flags */#define FILE_SUPERSEDE 0x00000000#define FILE_OPEN 0x00000001#define FILE_CREATE 0x00000002#define FILE_OPEN_IF 0x00000003#define FILE_OVERWRITE 0x00000004#define FILE_OVERWRITE_IF 0x00000005/* CreateOptions */#define CREATE_NOT_FILE 0x00000001 /* if set must not be file */#define CREATE_WRITE_THROUGH 0x00000002#define CREATE_SEQUENTIAL 0x00000004#define CREATE_SYNC_ALERT 0x00000010#define CREATE_ASYNC_ALERT 0x00000020#define CREATE_NOT_DIR 0x00000040 /* if set must not be directory */#define CREATE_NO_EA_KNOWLEDGE 0x00000200#define CREATE_EIGHT_DOT_THREE 0x00000400#define CREATE_RANDOM_ACCESS 0x00000800#define CREATE_DELETE_ON_CLOSE 0x00001000#define CREATE_OPEN_BY_ID 0x00002000#define OPEN_REPARSE_POINT 0x00200000#define CREATE_OPTIONS_MASK 0x007FFFFF#define CREATE_OPTION_SPECIAL 0x20000000 /* system. NB not sent over wire *//* ImpersonationLevel flags */#define SECURITY_ANONYMOUS 0#define SECURITY_IDENTIFICATION 1#define SECURITY_IMPERSONATION 2#define SECURITY_DELEGATION 3/* SecurityFlags */#define SECURITY_CONTEXT_TRACKING 0x01#define SECURITY_EFFECTIVE_ONLY 0x02/* * Default PID value, used in all SMBs where the PID is not important */#define CIFS_DFT_PID 0x1234/* * We use the same routine for Copy and Move SMBs. This flag is used to * distinguish */#define CIFS_COPY_OP 1#define CIFS_RENAME_OP 2#define GETU16(var) (*((__u16 *)var)) /* BB check for endian issues */#define GETU32(var) (*((__u32 *)var)) /* BB check for endian issues */struct smb_hdr { __u32 smb_buf_length; /* big endian on wire *//* BB length is only two or three bytes - with one or two byte type preceding it that are zero - we could mask the type byte off just in case BB */ __u8 Protocol[4]; __u8 Command; union { struct { __u8 ErrorClass; __u8 Reserved; __le16 Error; } __attribute__((packed)) DosError; __le32 CifsError; } __attribute__((packed)) Status; __u8 Flags; __le16 Flags2; /* note: le */ __le16 PidHigh; union { struct { __le32 SequenceNumber; /* le */ __u32 Reserved; /* zero */ } __attribute__((packed)) Sequence; __u8 SecuritySignature[8]; /* le */ } __attribute__((packed)) Signature; __u8 pad[2]; __u16 Tid; __le16 Pid; __u16 Uid; __u16 Mid; __u8 WordCount;} __attribute__((packed));/* given a pointer to an smb_hdr retrieve the value of byte count */#define BCC(smb_var) ( *(__u16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2 * smb_var->WordCount)))#define BCC_LE(smb_var) ( *(__le16 *)((char *)smb_var + sizeof(struct smb_hdr) + (2 * smb_var->WordCount)))/* given a pointer to an smb_hdr retrieve the pointer to the byte area */#define pByteArea(smb_var) ((unsigned char *)smb_var + sizeof(struct smb_hdr) + (2 * smb_var->WordCount) + 2)/* * Computer Name Length (since Netbios name was length 16 with last byte 0x20) * No longer as important, now that TCP names are more commonly used to * resolve hosts. */#define CNLEN 15/* * Share Name Length (SNLEN) * Note: This length was limited by the SMB used to get * the Share info. NetShareEnum only returned 13 * chars, including the null termination. * This was removed because it no longer is limiting. *//* * Comment Length */#define MAXCOMMENTLEN 40/* * The OS/2 maximum path name */#define MAX_PATHCONF 256/* * SMB frame definitions (following must be packed structs) * See the SNIA CIFS Specification for details. * * The Naming convention is the lower case version of the * smb command code name for the struct and this is typedef to the * uppercase version of the same name with the prefix SMB_ removed * for brevity. Although typedefs are not commonly used for * structure definitions in the Linux kernel, their use in the * CIFS standards document, which this code is based on, may * make this one of the cases where typedefs for structures make * sense to improve readability for readers of the standards doc. * Typedefs can always be removed later if they are too distracting * and they are only used for the CIFSs PDUs themselves, not * internal cifs vfs structures * */typedef struct negotiate_req { struct smb_hdr hdr; /* wct = 0 */ __le16 ByteCount;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -