0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _CIFSPDU_H
0010 #define _CIFSPDU_H
0011
0012 #include <net/sock.h>
0013 #include <asm/unaligned.h>
0014 #include "../smbfs_common/smbfsctl.h"
0015
0016 #define CIFS_PROT 0
0017 #define POSIX_PROT (CIFS_PROT+1)
0018 #define BAD_PROT 0xFFFF
0019
0020
0021
0022
0023
0024
0025 #define SMB_COM_CREATE_DIRECTORY 0x00
0026 #define SMB_COM_DELETE_DIRECTORY 0x01
0027 #define SMB_COM_CLOSE 0x04
0028 #define SMB_COM_FLUSH 0x05
0029 #define SMB_COM_DELETE 0x06
0030 #define SMB_COM_RENAME 0x07
0031 #define SMB_COM_QUERY_INFORMATION 0x08
0032 #define SMB_COM_SETATTR 0x09
0033 #define SMB_COM_LOCKING_ANDX 0x24
0034 #define SMB_COM_COPY 0x29
0035 #define SMB_COM_ECHO 0x2B
0036 #define SMB_COM_OPEN_ANDX 0x2D
0037 #define SMB_COM_READ_ANDX 0x2E
0038 #define SMB_COM_WRITE_ANDX 0x2F
0039 #define SMB_COM_TRANSACTION2 0x32
0040 #define SMB_COM_TRANSACTION2_SECONDARY 0x33
0041 #define SMB_COM_FIND_CLOSE2 0x34
0042 #define SMB_COM_TREE_DISCONNECT 0x71
0043 #define SMB_COM_NEGOTIATE 0x72
0044 #define SMB_COM_SESSION_SETUP_ANDX 0x73
0045 #define SMB_COM_LOGOFF_ANDX 0x74
0046 #define SMB_COM_TREE_CONNECT_ANDX 0x75
0047 #define SMB_COM_NT_TRANSACT 0xA0
0048 #define SMB_COM_NT_TRANSACT_SECONDARY 0xA1
0049 #define SMB_COM_NT_CREATE_ANDX 0xA2
0050 #define SMB_COM_NT_CANCEL 0xA4
0051 #define SMB_COM_NT_RENAME 0xA5
0052
0053
0054 #define TRANS2_OPEN 0x00
0055 #define TRANS2_FIND_FIRST 0x01
0056 #define TRANS2_FIND_NEXT 0x02
0057 #define TRANS2_QUERY_FS_INFORMATION 0x03
0058 #define TRANS2_SET_FS_INFORMATION 0x04
0059 #define TRANS2_QUERY_PATH_INFORMATION 0x05
0060 #define TRANS2_SET_PATH_INFORMATION 0x06
0061 #define TRANS2_QUERY_FILE_INFORMATION 0x07
0062 #define TRANS2_SET_FILE_INFORMATION 0x08
0063 #define TRANS2_GET_DFS_REFERRAL 0x10
0064 #define TRANS2_REPORT_DFS_INCOSISTENCY 0x11
0065
0066
0067 #define TRANS_SET_NMPIPE_STATE 0x0001
0068 #define TRANS_RAW_READ_NMPIPE 0x0011
0069 #define TRANS_QUERY_NMPIPE_STATE 0x0021
0070 #define TRANS_QUERY_NMPIPE_INFO 0x0022
0071 #define TRANS_PEEK_NMPIPE 0x0023
0072 #define TRANS_TRANSACT_NMPIPE 0x0026
0073 #define TRANS_RAW_WRITE_NMPIPE 0x0031
0074 #define TRANS_READ_NMPIPE 0x0036
0075 #define TRANS_WRITE_NMPIPE 0x0037
0076 #define TRANS_WAIT_NMPIPE 0x0053
0077 #define TRANS_CALL_NMPIPE 0x0054
0078
0079
0080 #define NT_TRANSACT_CREATE 0x01
0081 #define NT_TRANSACT_IOCTL 0x02
0082 #define NT_TRANSACT_SET_SECURITY_DESC 0x03
0083 #define NT_TRANSACT_NOTIFY_CHANGE 0x04
0084 #define NT_TRANSACT_RENAME 0x05
0085 #define NT_TRANSACT_QUERY_SECURITY_DESC 0x06
0086 #define NT_TRANSACT_GET_USER_QUOTA 0x07
0087 #define NT_TRANSACT_SET_USER_QUOTA 0x08
0088
0089 #define MAX_CIFS_SMALL_BUFFER_SIZE 448
0090
0091
0092 #define MAX_CIFS_HDR_SIZE 0x58
0093 #define CIFS_SMALL_PATH 120
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104 #define CIFS_MAX_MSGSIZE (4*4096)
0105
0106
0107
0108
0109 #define CIFS_ENCPWD_SIZE (16)
0110
0111
0112
0113
0114 #define CIFS_CRYPTO_KEY_SIZE (8)
0115
0116
0117
0118
0119 #define CIFS_AUTH_RESP_SIZE (24)
0120
0121
0122
0123
0124 #define CIFS_SESS_KEY_SIZE (16)
0125
0126 #define CIFS_SERVER_CHALLENGE_SIZE (8)
0127 #define CIFS_HMAC_MD5_HASH_SIZE (16)
0128 #define CIFS_CPHTXT_SIZE (16)
0129 #define CIFS_NTHASH_SIZE (16)
0130
0131
0132
0133
0134 #define CIFS_UNLEN (20)
0135
0136
0137
0138
0139 #define SMBOPEN_WRITE_THROUGH 0x4000
0140 #define SMBOPEN_DENY_ALL 0x0010
0141 #define SMBOPEN_DENY_WRITE 0x0020
0142 #define SMBOPEN_DENY_READ 0x0030
0143 #define SMBOPEN_DENY_NONE 0x0040
0144 #define SMBOPEN_READ 0x0000
0145 #define SMBOPEN_WRITE 0x0001
0146 #define SMBOPEN_READWRITE 0x0002
0147 #define SMBOPEN_EXECUTE 0x0003
0148
0149 #define SMBOPEN_OCREATE 0x0010
0150 #define SMBOPEN_OTRUNC 0x0002
0151 #define SMBOPEN_OAPPEND 0x0001
0152
0153
0154
0155
0156 #define SMBFLG_EXTD_LOCK 0x01
0157 #define SMBFLG_RCV_POSTED 0x02
0158 #define SMBFLG_RSVD 0x04
0159 #define SMBFLG_CASELESS 0x08
0160
0161 #define SMBFLG_CANONICAL_PATH_FORMAT 0x10
0162 #define SMBFLG_OLD_OPLOCK 0x20
0163 #define SMBFLG_OLD_OPLOCK_NOTIFY 0x40
0164 #define SMBFLG_RESPONSE 0x80
0165
0166
0167
0168
0169 #define SMBFLG2_KNOWS_LONG_NAMES cpu_to_le16(1)
0170
0171 #define SMBFLG2_KNOWS_EAS cpu_to_le16(2)
0172 #define SMBFLG2_SECURITY_SIGNATURE cpu_to_le16(4)
0173 #define SMBFLG2_COMPRESSED (8)
0174 #define SMBFLG2_SECURITY_SIGNATURE_REQUIRED (0x10)
0175 #define SMBFLG2_IS_LONG_NAME cpu_to_le16(0x40)
0176 #define SMBFLG2_REPARSE_PATH (0x400)
0177 #define SMBFLG2_EXT_SEC cpu_to_le16(0x800)
0178 #define SMBFLG2_DFS cpu_to_le16(0x1000)
0179 #define SMBFLG2_PAGING_IO cpu_to_le16(0x2000)
0180 #define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000)
0181 #define SMBFLG2_UNICODE cpu_to_le16(0x8000)
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192 #define FILE_READ_DATA 0x00000001
0193 #define FILE_WRITE_DATA 0x00000002
0194 #define FILE_APPEND_DATA 0x00000004
0195 #define FILE_READ_EA 0x00000008
0196
0197 #define FILE_WRITE_EA 0x00000010
0198
0199 #define FILE_EXECUTE 0x00000020
0200
0201 #define FILE_DELETE_CHILD 0x00000040
0202 #define FILE_READ_ATTRIBUTES 0x00000080
0203
0204 #define FILE_WRITE_ATTRIBUTES 0x00000100
0205
0206 #define DELETE 0x00010000
0207 #define READ_CONTROL 0x00020000
0208
0209
0210 #define WRITE_DAC 0x00040000
0211
0212
0213 #define WRITE_OWNER 0x00080000
0214
0215 #define SYNCHRONIZE 0x00100000
0216
0217
0218 #define SYSTEM_SECURITY 0x01000000
0219
0220 #define GENERIC_ALL 0x10000000
0221 #define GENERIC_EXECUTE 0x20000000
0222 #define GENERIC_WRITE 0x40000000
0223 #define GENERIC_READ 0x80000000
0224
0225
0226
0227
0228
0229
0230 #define FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_READ_ATTRIBUTES)
0231 #define FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \
0232 | FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES)
0233 #define FILE_EXEC_RIGHTS (FILE_EXECUTE)
0234
0235 #define SET_FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_WRITE_EA \
0236 | FILE_READ_ATTRIBUTES \
0237 | FILE_WRITE_ATTRIBUTES \
0238 | DELETE | READ_CONTROL | WRITE_DAC \
0239 | WRITE_OWNER | SYNCHRONIZE)
0240 #define SET_FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \
0241 | FILE_READ_EA | FILE_WRITE_EA \
0242 | FILE_READ_ATTRIBUTES \
0243 | FILE_WRITE_ATTRIBUTES \
0244 | DELETE | READ_CONTROL | WRITE_DAC \
0245 | WRITE_OWNER | SYNCHRONIZE)
0246 #define SET_FILE_EXEC_RIGHTS (FILE_READ_EA | FILE_WRITE_EA | FILE_EXECUTE \
0247 | FILE_READ_ATTRIBUTES \
0248 | FILE_WRITE_ATTRIBUTES \
0249 | DELETE | READ_CONTROL | WRITE_DAC \
0250 | WRITE_OWNER | SYNCHRONIZE)
0251
0252 #define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \
0253 | READ_CONTROL | SYNCHRONIZE)
0254
0255
0256
0257
0258
0259 #define CIFS_NO_HANDLE 0xFFFF
0260
0261 #define NO_CHANGE_64 0xFFFFFFFFFFFFFFFFULL
0262
0263
0264 #define CIFS_IPC_RESOURCE "\x49\x50\x43\x24"
0265
0266
0267 #define CIFS_IPC_UNICODE_RESOURCE "\x00\x49\x00\x50\x00\x43\x00\x24\x00\x00"
0268
0269
0270 #define UNICODE_NULL "\x00\x00"
0271 #define ASCII_NULL 0x00
0272
0273
0274
0275
0276 #define CIFS_SV_TYPE_DC 0x00000008
0277 #define CIFS_SV_TYPE_BACKDC 0x00000010
0278
0279
0280
0281
0282 #define CIFS_ALIAS_TYPE_FILE 0x0001
0283 #define CIFS_SHARE_TYPE_FILE 0x0000
0284
0285
0286
0287
0288 #define ATTR_READONLY 0x0001
0289 #define ATTR_HIDDEN 0x0002
0290 #define ATTR_SYSTEM 0x0004
0291 #define ATTR_VOLUME 0x0008
0292 #define ATTR_DIRECTORY 0x0010
0293 #define ATTR_ARCHIVE 0x0020
0294 #define ATTR_DEVICE 0x0040
0295 #define ATTR_NORMAL 0x0080
0296 #define ATTR_TEMPORARY 0x0100
0297 #define ATTR_SPARSE 0x0200
0298 #define ATTR_REPARSE 0x0400
0299 #define ATTR_COMPRESSED 0x0800
0300 #define ATTR_OFFLINE 0x1000
0301
0302 #define ATTR_NOT_CONTENT_INDEXED 0x2000
0303 #define ATTR_ENCRYPTED 0x4000
0304 #define ATTR_POSIX_SEMANTICS 0x01000000
0305 #define ATTR_BACKUP_SEMANTICS 0x02000000
0306 #define ATTR_DELETE_ON_CLOSE 0x04000000
0307 #define ATTR_SEQUENTIAL_SCAN 0x08000000
0308 #define ATTR_RANDOM_ACCESS 0x10000000
0309 #define ATTR_NO_BUFFERING 0x20000000
0310 #define ATTR_WRITE_THROUGH 0x80000000
0311
0312
0313 #define FILE_NO_SHARE 0x00000000
0314 #define FILE_SHARE_READ 0x00000001
0315 #define FILE_SHARE_WRITE 0x00000002
0316 #define FILE_SHARE_DELETE 0x00000004
0317 #define FILE_SHARE_ALL 0x00000007
0318
0319
0320 #define FILE_SUPERSEDE 0x00000000
0321 #define FILE_OPEN 0x00000001
0322 #define FILE_CREATE 0x00000002
0323 #define FILE_OPEN_IF 0x00000003
0324 #define FILE_OVERWRITE 0x00000004
0325 #define FILE_OVERWRITE_IF 0x00000005
0326
0327
0328 #define CREATE_NOT_FILE 0x00000001
0329 #define CREATE_WRITE_THROUGH 0x00000002
0330 #define CREATE_SEQUENTIAL 0x00000004
0331 #define CREATE_NO_BUFFER 0x00000008
0332 #define CREATE_SYNC_ALERT 0x00000010
0333 #define CREATE_ASYNC_ALERT 0x00000020
0334 #define CREATE_NOT_DIR 0x00000040
0335 #define CREATE_TREE_CONNECTION 0x00000080
0336 #define CREATE_COMPLETE_IF_OPLK 0x00000100
0337 #define CREATE_NO_EA_KNOWLEDGE 0x00000200
0338 #define CREATE_EIGHT_DOT_THREE 0x00000400
0339
0340
0341 #define CREATE_OPEN_FOR_RECOVERY 0x00000400
0342 #define CREATE_RANDOM_ACCESS 0x00000800
0343 #define CREATE_DELETE_ON_CLOSE 0x00001000
0344 #define CREATE_OPEN_BY_ID 0x00002000
0345 #define CREATE_OPEN_BACKUP_INTENT 0x00004000
0346 #define CREATE_NO_COMPRESSION 0x00008000
0347 #define CREATE_RESERVE_OPFILTER 0x00100000
0348 #define OPEN_REPARSE_POINT 0x00200000
0349 #define OPEN_NO_RECALL 0x00400000
0350 #define OPEN_FREE_SPACE_QUERY 0x00800000
0351 #define CREATE_OPTIONS_MASK 0x007FFFFF
0352 #define CREATE_OPTION_READONLY 0x10000000
0353 #define CREATE_OPTION_SPECIAL 0x20000000
0354
0355
0356 #define SECURITY_ANONYMOUS 0
0357 #define SECURITY_IDENTIFICATION 1
0358 #define SECURITY_IMPERSONATION 2
0359 #define SECURITY_DELEGATION 3
0360
0361
0362 #define SECURITY_CONTEXT_TRACKING 0x01
0363 #define SECURITY_EFFECTIVE_ONLY 0x02
0364
0365
0366
0367
0368 #define CIFS_DFT_PID 0x1234
0369
0370
0371
0372
0373
0374 #define CIFS_COPY_OP 1
0375 #define CIFS_RENAME_OP 2
0376
0377 #define GETU16(var) (*((__u16 *)var))
0378 #define GETU32(var) (*((__u32 *)var))
0379
0380 struct smb_hdr {
0381 __be32 smb_buf_length;
0382
0383
0384 __u8 Protocol[4];
0385 __u8 Command;
0386 union {
0387 struct {
0388 __u8 ErrorClass;
0389 __u8 Reserved;
0390 __le16 Error;
0391 } __attribute__((packed)) DosError;
0392 __le32 CifsError;
0393 } __attribute__((packed)) Status;
0394 __u8 Flags;
0395 __le16 Flags2;
0396 __le16 PidHigh;
0397 union {
0398 struct {
0399 __le32 SequenceNumber;
0400 __u32 Reserved;
0401 } __attribute__((packed)) Sequence;
0402 __u8 SecuritySignature[8];
0403 } __attribute__((packed)) Signature;
0404 __u8 pad[2];
0405 __u16 Tid;
0406 __le16 Pid;
0407 __u16 Uid;
0408 __le16 Mid;
0409 __u8 WordCount;
0410 } __attribute__((packed));
0411
0412
0413 static inline void *
0414 BCC(struct smb_hdr *smb)
0415 {
0416 return (void *)smb + sizeof(*smb) + 2 * smb->WordCount;
0417 }
0418
0419
0420 #define pByteArea(smb_var) (BCC(smb_var) + 2)
0421
0422
0423 static inline __u16
0424 get_bcc(struct smb_hdr *hdr)
0425 {
0426 __le16 *bc_ptr = (__le16 *)BCC(hdr);
0427
0428 return get_unaligned_le16(bc_ptr);
0429 }
0430
0431
0432 static inline void
0433 put_bcc(__u16 count, struct smb_hdr *hdr)
0434 {
0435 __le16 *bc_ptr = (__le16 *)BCC(hdr);
0436
0437 put_unaligned_le16(count, bc_ptr);
0438 }
0439
0440
0441
0442
0443
0444
0445 #define CNLEN 15
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458 #define MAXCOMMENTLEN 40
0459
0460
0461
0462
0463 #define MAX_PATHCONF 256
0464
0465
0466
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481
0482
0483 typedef struct negotiate_req {
0484 struct smb_hdr hdr;
0485 __le16 ByteCount;
0486 unsigned char DialectsArray[1];
0487 } __attribute__((packed)) NEGOTIATE_REQ;
0488
0489 #define MIN_TZ_ADJ (15 * 60)
0490
0491 #define READ_RAW_ENABLE 1
0492 #define WRITE_RAW_ENABLE 2
0493 #define RAW_ENABLE (READ_RAW_ENABLE | WRITE_RAW_ENABLE)
0494 #define SMB1_CLIENT_GUID_SIZE (16)
0495 typedef struct negotiate_rsp {
0496 struct smb_hdr hdr;
0497 __le16 DialectIndex;
0498 __u8 SecurityMode;
0499 __le16 MaxMpxCount;
0500 __le16 MaxNumberVcs;
0501 __le32 MaxBufferSize;
0502 __le32 MaxRawSize;
0503 __le32 SessionKey;
0504 __le32 Capabilities;
0505 __le32 SystemTimeLow;
0506 __le32 SystemTimeHigh;
0507 __le16 ServerTimeZone;
0508 __u8 EncryptionKeyLength;
0509 __u16 ByteCount;
0510 union {
0511 unsigned char EncryptionKey[1];
0512
0513
0514
0515 struct {
0516 unsigned char GUID[SMB1_CLIENT_GUID_SIZE];
0517 unsigned char SecurityBlob[1];
0518 } __attribute__((packed)) extended_response;
0519 } __attribute__((packed)) u;
0520 } __attribute__((packed)) NEGOTIATE_RSP;
0521
0522
0523 #define SECMODE_USER 0x01
0524 #define SECMODE_PW_ENCRYPT 0x02
0525 #define SECMODE_SIGN_ENABLED 0x04
0526 #define SECMODE_SIGN_REQUIRED 0x08
0527
0528
0529 #define CAP_RAW_MODE 0x00000001
0530 #define CAP_MPX_MODE 0x00000002
0531 #define CAP_UNICODE 0x00000004
0532 #define CAP_LARGE_FILES 0x00000008
0533 #define CAP_NT_SMBS 0x00000010
0534 #define CAP_RPC_REMOTE_APIS 0x00000020
0535 #define CAP_STATUS32 0x00000040
0536 #define CAP_LEVEL_II_OPLOCKS 0x00000080
0537 #define CAP_LOCK_AND_READ 0x00000100
0538 #define CAP_NT_FIND 0x00000200
0539 #define CAP_DFS 0x00001000
0540 #define CAP_INFOLEVEL_PASSTHRU 0x00002000
0541 #define CAP_LARGE_READ_X 0x00004000
0542 #define CAP_LARGE_WRITE_X 0x00008000
0543 #define CAP_LWIO 0x00010000
0544 #define CAP_UNIX 0x00800000
0545 #define CAP_COMPRESSED_DATA 0x02000000
0546 #define CAP_DYNAMIC_REAUTH 0x20000000
0547 #define CAP_PERSISTENT_HANDLES 0x40000000
0548 #define CAP_EXTENDED_SECURITY 0x80000000
0549
0550 typedef union smb_com_session_setup_andx {
0551 struct {
0552 struct smb_hdr hdr;
0553 __u8 AndXCommand;
0554 __u8 AndXReserved;
0555 __le16 AndXOffset;
0556 __le16 MaxBufferSize;
0557 __le16 MaxMpxCount;
0558 __le16 VcNumber;
0559 __u32 SessionKey;
0560 __le16 SecurityBlobLength;
0561 __u32 Reserved;
0562 __le32 Capabilities;
0563 __le16 ByteCount;
0564 unsigned char SecurityBlob[1];
0565
0566
0567 } __attribute__((packed)) req;
0568
0569
0570 struct {
0571 struct smb_hdr hdr;
0572 __u8 AndXCommand;
0573 __u8 AndXReserved;
0574 __le16 AndXOffset;
0575 __le16 MaxBufferSize;
0576 __le16 MaxMpxCount;
0577 __le16 VcNumber;
0578 __u32 SessionKey;
0579 __le16 CaseInsensitivePasswordLength;
0580 __le16 CaseSensitivePasswordLength;
0581 __u32 Reserved;
0582 __le32 Capabilities;
0583 __le16 ByteCount;
0584 unsigned char CaseInsensitivePassword[1];
0585
0586
0587
0588
0589
0590 } __attribute__((packed)) req_no_secext;
0591
0592
0593 struct {
0594 struct smb_hdr hdr;
0595 __u8 AndXCommand;
0596 __u8 AndXReserved;
0597 __le16 AndXOffset;
0598 __le16 Action;
0599 __le16 SecurityBlobLength;
0600 __u16 ByteCount;
0601 unsigned char SecurityBlob[1];
0602
0603
0604
0605 } __attribute__((packed)) resp;
0606
0607
0608 struct {
0609 struct smb_hdr hdr;
0610 __u8 AndXCommand;
0611 __u8 AndXReserved;
0612 __le16 AndXOffset;
0613 __le16 MaxBufferSize;
0614 __le16 MaxMpxCount;
0615 __le16 VcNumber;
0616 __u32 SessionKey;
0617 __le16 PasswordLength;
0618 __u32 Reserved;
0619 __le16 ByteCount;
0620 unsigned char AccountPassword[1];
0621
0622
0623
0624
0625 } __attribute__((packed)) old_req;
0626
0627 struct {
0628 struct smb_hdr hdr;
0629 __u8 AndXCommand;
0630 __u8 AndXReserved;
0631 __le16 AndXOffset;
0632 __le16 Action;
0633 __u16 ByteCount;
0634 unsigned char NativeOS[1];
0635
0636
0637 } __attribute__((packed)) old_resp;
0638 } __attribute__((packed)) SESSION_SETUP_ANDX;
0639
0640
0641
0642 #define NTLMSSP_SERVER_TYPE 1
0643 #define NTLMSSP_DOMAIN_TYPE 2
0644 #define NTLMSSP_FQ_DOMAIN_TYPE 3
0645 #define NTLMSSP_DNS_DOMAIN_TYPE 4
0646 #define NTLMSSP_DNS_PARENT_TYPE 5
0647
0648 struct ntlmssp2_name {
0649 __le16 type;
0650 __le16 length;
0651
0652 } __attribute__((packed));
0653
0654 struct ntlmv2_resp {
0655 union {
0656 char ntlmv2_hash[CIFS_ENCPWD_SIZE];
0657 struct {
0658 __u8 reserved[8];
0659 __u8 key[CIFS_SERVER_CHALLENGE_SIZE];
0660 } __attribute__((packed)) challenge;
0661 } __attribute__((packed));
0662 __le32 blob_signature;
0663 __u32 reserved;
0664 __le64 time;
0665 __u64 client_chal;
0666 __u32 reserved2;
0667
0668 } __attribute__((packed));
0669
0670
0671 #define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux"
0672
0673
0674 #define CAP_UNICODE 0x00000004
0675 #define CAP_LARGE_FILES 0x00000008
0676 #define CAP_NT_SMBS 0x00000010
0677 #define CAP_STATUS32 0x00000040
0678 #define CAP_LEVEL_II_OPLOCKS 0x00000080
0679 #define CAP_NT_FIND 0x00000200
0680
0681 #define CAP_BULK_TRANSFER 0x20000000
0682 #define CAP_EXTENDED_SECURITY 0x80000000
0683
0684
0685 #define GUEST_LOGIN 1
0686
0687 typedef struct smb_com_tconx_req {
0688 struct smb_hdr hdr;
0689 __u8 AndXCommand;
0690 __u8 AndXReserved;
0691 __le16 AndXOffset;
0692 __le16 Flags;
0693 __le16 PasswordLength;
0694 __le16 ByteCount;
0695 unsigned char Password[1];
0696
0697
0698 } __attribute__((packed)) TCONX_REQ;
0699
0700 typedef struct smb_com_tconx_rsp {
0701 struct smb_hdr hdr;
0702 __u8 AndXCommand;
0703 __u8 AndXReserved;
0704 __le16 AndXOffset;
0705 __le16 OptionalSupport;
0706 __u16 ByteCount;
0707 unsigned char Service[1];
0708
0709 } __attribute__((packed)) TCONX_RSP;
0710
0711 typedef struct smb_com_tconx_rsp_ext {
0712 struct smb_hdr hdr;
0713 __u8 AndXCommand;
0714 __u8 AndXReserved;
0715 __le16 AndXOffset;
0716 __le16 OptionalSupport;
0717 __le32 MaximalShareAccessRights;
0718 __le32 GuestMaximalShareAccessRights;
0719 __u16 ByteCount;
0720 unsigned char Service[1];
0721
0722 } __attribute__((packed)) TCONX_RSP_EXT;
0723
0724
0725
0726 #define DISCONNECT_TID 0x0001
0727 #define TCON_EXTENDED_SIGNATURES 0x0004
0728 #define TCON_EXTENDED_SECINFO 0x0008
0729
0730
0731 #define SMB_SUPPORT_SEARCH_BITS 0x0001
0732
0733 #define SMB_SHARE_IS_IN_DFS 0x0002
0734 #define SMB_CSC_MASK 0x000C
0735
0736 #define SMB_CSC_CACHE_MANUAL_REINT 0x0000
0737 #define SMB_CSC_CACHE_AUTO_REINT 0x0004
0738 #define SMB_CSC_CACHE_VDO 0x0008
0739 #define SMB_CSC_NO_CACHING 0x000C
0740 #define SMB_UNIQUE_FILE_NAME 0x0010
0741 #define SMB_EXTENDED_SIGNATURES 0x0020
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753 typedef struct smb_com_echo_req {
0754 struct smb_hdr hdr;
0755 __le16 EchoCount;
0756 __le16 ByteCount;
0757 char Data[1];
0758 } __attribute__((packed)) ECHO_REQ;
0759
0760 typedef struct smb_com_echo_rsp {
0761 struct smb_hdr hdr;
0762 __le16 SequenceNumber;
0763 __le16 ByteCount;
0764 char Data[1];
0765 } __attribute__((packed)) ECHO_RSP;
0766
0767 typedef struct smb_com_logoff_andx_req {
0768 struct smb_hdr hdr;
0769 __u8 AndXCommand;
0770 __u8 AndXReserved;
0771 __u16 AndXOffset;
0772 __u16 ByteCount;
0773 } __attribute__((packed)) LOGOFF_ANDX_REQ;
0774
0775 typedef struct smb_com_logoff_andx_rsp {
0776 struct smb_hdr hdr;
0777 __u8 AndXCommand;
0778 __u8 AndXReserved;
0779 __u16 AndXOffset;
0780 __u16 ByteCount;
0781 } __attribute__((packed)) LOGOFF_ANDX_RSP;
0782
0783 typedef union smb_com_tree_disconnect {
0784
0785
0786 struct {
0787 struct smb_hdr hdr;
0788 __u16 ByteCount;
0789 } __attribute__((packed)) req;
0790 struct {
0791 struct smb_hdr hdr;
0792 __u16 ByteCount;
0793 } __attribute__((packed)) resp;
0794 } __attribute__((packed)) TREE_DISCONNECT;
0795
0796 typedef struct smb_com_close_req {
0797 struct smb_hdr hdr;
0798 __u16 FileID;
0799 __u32 LastWriteTime;
0800 __u16 ByteCount;
0801 } __attribute__((packed)) CLOSE_REQ;
0802
0803 typedef struct smb_com_close_rsp {
0804 struct smb_hdr hdr;
0805 __u16 ByteCount;
0806 } __attribute__((packed)) CLOSE_RSP;
0807
0808 typedef struct smb_com_flush_req {
0809 struct smb_hdr hdr;
0810 __u16 FileID;
0811 __u16 ByteCount;
0812 } __attribute__((packed)) FLUSH_REQ;
0813
0814 typedef struct smb_com_findclose_req {
0815 struct smb_hdr hdr;
0816 __u16 FileID;
0817 __u16 ByteCount;
0818 } __attribute__((packed)) FINDCLOSE_REQ;
0819
0820
0821 #define REQ_MORE_INFO 0x00000001
0822 #define REQ_OPLOCK 0x00000002
0823 #define REQ_BATCHOPLOCK 0x00000004
0824 #define REQ_OPENDIRONLY 0x00000008
0825 #define REQ_EXTENDED_INFO 0x00000010
0826
0827
0828 #define DISK_TYPE 0x0000
0829 #define BYTE_PIPE_TYPE 0x0001
0830 #define MESSAGE_PIPE_TYPE 0x0002
0831 #define PRINTER_TYPE 0x0003
0832 #define COMM_DEV_TYPE 0x0004
0833 #define UNKNOWN_TYPE 0xFFFF
0834
0835
0836 #define NO_EAS 0x0001
0837 #define NO_SUBSTREAMS 0x0002
0838 #define NO_REPARSETAG 0x0004
0839
0840 #define ICOUNT_MASK 0x00FF
0841 #define PIPE_READ_MODE 0x0100
0842 #define NAMED_PIPE_TYPE 0x0400
0843 #define PIPE_END_POINT 0x4000
0844 #define BLOCKING_NAMED_PIPE 0x8000
0845
0846 typedef struct smb_com_open_req {
0847 struct smb_hdr hdr;
0848 __u8 AndXCommand;
0849 __u8 AndXReserved;
0850 __le16 AndXOffset;
0851 __u8 Reserved;
0852 __le16 NameLength;
0853 __le32 OpenFlags;
0854 __u32 RootDirectoryFid;
0855 __le32 DesiredAccess;
0856 __le64 AllocationSize;
0857 __le32 FileAttributes;
0858 __le32 ShareAccess;
0859 __le32 CreateDisposition;
0860 __le32 CreateOptions;
0861 __le32 ImpersonationLevel;
0862 __u8 SecurityFlags;
0863 __le16 ByteCount;
0864 char fileName[1];
0865 } __attribute__((packed)) OPEN_REQ;
0866
0867
0868 #define OPLOCK_NONE 0
0869 #define OPLOCK_EXCLUSIVE 1
0870 #define OPLOCK_BATCH 2
0871 #define OPLOCK_READ 3
0872
0873
0874 #define CIFS_CREATE_ACTION 0x20000
0875
0876 typedef struct smb_com_open_rsp {
0877 struct smb_hdr hdr;
0878 __u8 AndXCommand;
0879 __u8 AndXReserved;
0880 __le16 AndXOffset;
0881 __u8 OplockLevel;
0882 __u16 Fid;
0883 __le32 CreateAction;
0884 __le64 CreationTime;
0885 __le64 LastAccessTime;
0886 __le64 LastWriteTime;
0887 __le64 ChangeTime;
0888 __le32 FileAttributes;
0889 __le64 AllocationSize;
0890 __le64 EndOfFile;
0891 __le16 FileType;
0892 __le16 DeviceState;
0893 __u8 DirectoryFlag;
0894 __u16 ByteCount;
0895 } __attribute__((packed)) OPEN_RSP;
0896
0897 typedef struct smb_com_open_rsp_ext {
0898 struct smb_hdr hdr;
0899 __u8 AndXCommand;
0900 __u8 AndXReserved;
0901 __le16 AndXOffset;
0902 __u8 OplockLevel;
0903 __u16 Fid;
0904 __le32 CreateAction;
0905 __le64 CreationTime;
0906 __le64 LastAccessTime;
0907 __le64 LastWriteTime;
0908 __le64 ChangeTime;
0909 __le32 FileAttributes;
0910 __le64 AllocationSize;
0911 __le64 EndOfFile;
0912 __le16 FileType;
0913 __le16 DeviceState;
0914 __u8 DirectoryFlag;
0915 __u8 VolumeGUID[16];
0916 __u64 FileId;
0917 __le32 MaximalAccessRights;
0918 __le32 GuestMaximalAccessRights;
0919 __u16 ByteCount;
0920 } __attribute__((packed)) OPEN_RSP_EXT;
0921
0922
0923
0924 typedef struct smb_com_openx_req {
0925 struct smb_hdr hdr;
0926 __u8 AndXCommand;
0927 __u8 AndXReserved;
0928 __le16 AndXOffset;
0929 __le16 OpenFlags;
0930 __le16 Mode;
0931 __le16 Sattr;
0932 __le16 FileAttributes;
0933 __le32 CreateTime;
0934 __le16 OpenFunction;
0935 __le32 EndOfFile;
0936 __le32 Timeout;
0937 __le32 Reserved;
0938 __le16 ByteCount;
0939 char fileName[1];
0940 } __attribute__((packed)) OPENX_REQ;
0941
0942 typedef struct smb_com_openx_rsp {
0943 struct smb_hdr hdr;
0944 __u8 AndXCommand;
0945 __u8 AndXReserved;
0946 __le16 AndXOffset;
0947 __u16 Fid;
0948 __le16 FileAttributes;
0949 __le32 LastWriteTime;
0950 __le32 EndOfFile;
0951 __le16 Access;
0952 __le16 FileType;
0953 __le16 IPCState;
0954 __le16 Action;
0955 __u32 FileId;
0956 __u16 Reserved;
0957 __u16 ByteCount;
0958 } __attribute__((packed)) OPENX_RSP;
0959
0960
0961
0962
0963 typedef struct smb_com_writex_req {
0964 struct smb_hdr hdr;
0965 __u8 AndXCommand;
0966 __u8 AndXReserved;
0967 __le16 AndXOffset;
0968 __u16 Fid;
0969 __le32 OffsetLow;
0970 __u32 Reserved;
0971 __le16 WriteMode;
0972 __le16 Remaining;
0973 __le16 Reserved2;
0974 __le16 DataLengthLow;
0975 __le16 DataOffset;
0976 __le16 ByteCount;
0977 __u8 Pad;
0978
0979 char Data[];
0980 } __attribute__((packed)) WRITEX_REQ;
0981
0982 typedef struct smb_com_write_req {
0983 struct smb_hdr hdr;
0984 __u8 AndXCommand;
0985 __u8 AndXReserved;
0986 __le16 AndXOffset;
0987 __u16 Fid;
0988 __le32 OffsetLow;
0989 __u32 Reserved;
0990 __le16 WriteMode;
0991 __le16 Remaining;
0992 __le16 DataLengthHigh;
0993 __le16 DataLengthLow;
0994 __le16 DataOffset;
0995 __le32 OffsetHigh;
0996 __le16 ByteCount;
0997 __u8 Pad;
0998
0999 char Data[];
1000 } __attribute__((packed)) WRITE_REQ;
1001
1002 typedef struct smb_com_write_rsp {
1003 struct smb_hdr hdr;
1004 __u8 AndXCommand;
1005 __u8 AndXReserved;
1006 __le16 AndXOffset;
1007 __le16 Count;
1008 __le16 Remaining;
1009 __le16 CountHigh;
1010 __u16 Reserved;
1011 __u16 ByteCount;
1012 } __attribute__((packed)) WRITE_RSP;
1013
1014
1015 typedef struct smb_com_readx_req {
1016 struct smb_hdr hdr;
1017 __u8 AndXCommand;
1018 __u8 AndXReserved;
1019 __le16 AndXOffset;
1020 __u16 Fid;
1021 __le32 OffsetLow;
1022 __le16 MaxCount;
1023 __le16 MinCount;
1024 __le32 Reserved;
1025 __le16 Remaining;
1026 __le16 ByteCount;
1027 } __attribute__((packed)) READX_REQ;
1028
1029 typedef struct smb_com_read_req {
1030 struct smb_hdr hdr;
1031 __u8 AndXCommand;
1032 __u8 AndXReserved;
1033 __le16 AndXOffset;
1034 __u16 Fid;
1035 __le32 OffsetLow;
1036 __le16 MaxCount;
1037 __le16 MinCount;
1038 __le32 MaxCountHigh;
1039 __le16 Remaining;
1040 __le32 OffsetHigh;
1041 __le16 ByteCount;
1042 } __attribute__((packed)) READ_REQ;
1043
1044 typedef struct smb_com_read_rsp {
1045 struct smb_hdr hdr;
1046 __u8 AndXCommand;
1047 __u8 AndXReserved;
1048 __le16 AndXOffset;
1049 __le16 Remaining;
1050 __le16 DataCompactionMode;
1051 __le16 Reserved;
1052 __le16 DataLength;
1053 __le16 DataOffset;
1054 __le16 DataLengthHigh;
1055 __u64 Reserved2;
1056 __u16 ByteCount;
1057
1058 } __attribute__((packed)) READ_RSP;
1059
1060 typedef struct locking_andx_range {
1061 __le16 Pid;
1062 __le16 Pad;
1063 __le32 OffsetHigh;
1064 __le32 OffsetLow;
1065 __le32 LengthHigh;
1066 __le32 LengthLow;
1067 } __attribute__((packed)) LOCKING_ANDX_RANGE;
1068
1069 #define LOCKING_ANDX_SHARED_LOCK 0x01
1070 #define LOCKING_ANDX_OPLOCK_RELEASE 0x02
1071 #define LOCKING_ANDX_CHANGE_LOCKTYPE 0x04
1072 #define LOCKING_ANDX_CANCEL_LOCK 0x08
1073 #define LOCKING_ANDX_LARGE_FILES 0x10
1074
1075 typedef struct smb_com_lock_req {
1076 struct smb_hdr hdr;
1077 __u8 AndXCommand;
1078 __u8 AndXReserved;
1079 __le16 AndXOffset;
1080 __u16 Fid;
1081 __u8 LockType;
1082 __u8 OplockLevel;
1083 __le32 Timeout;
1084 __le16 NumberOfUnlocks;
1085 __le16 NumberOfLocks;
1086 __le16 ByteCount;
1087 LOCKING_ANDX_RANGE Locks[1];
1088 } __attribute__((packed)) LOCK_REQ;
1089
1090
1091 #define CIFS_RDLCK 0
1092 #define CIFS_WRLCK 1
1093 #define CIFS_UNLCK 2
1094 typedef struct cifs_posix_lock {
1095 __le16 lock_type;
1096 __le16 lock_flags;
1097 __le32 pid;
1098 __le64 start;
1099 __le64 length;
1100
1101 } __attribute__((packed)) CIFS_POSIX_LOCK;
1102
1103 typedef struct smb_com_lock_rsp {
1104 struct smb_hdr hdr;
1105 __u8 AndXCommand;
1106 __u8 AndXReserved;
1107 __le16 AndXOffset;
1108 __u16 ByteCount;
1109 } __attribute__((packed)) LOCK_RSP;
1110
1111 typedef struct smb_com_rename_req {
1112 struct smb_hdr hdr;
1113 __le16 SearchAttributes;
1114 __le16 ByteCount;
1115 __u8 BufferFormat;
1116 unsigned char OldFileName[1];
1117
1118
1119 } __attribute__((packed)) RENAME_REQ;
1120
1121
1122 #define COPY_MUST_BE_FILE 0x0001
1123 #define COPY_MUST_BE_DIR 0x0002
1124 #define COPY_TARGET_MODE_ASCII 0x0004
1125 #define COPY_SOURCE_MODE_ASCII 0x0008
1126 #define COPY_VERIFY_WRITES 0x0010
1127 #define COPY_TREE 0x0020
1128
1129 typedef struct smb_com_copy_req {
1130 struct smb_hdr hdr;
1131 __u16 Tid2;
1132 __le16 OpenFunction;
1133 __le16 Flags;
1134 __le16 ByteCount;
1135 __u8 BufferFormat;
1136 unsigned char OldFileName[1];
1137
1138
1139 } __attribute__((packed)) COPY_REQ;
1140
1141 typedef struct smb_com_copy_rsp {
1142 struct smb_hdr hdr;
1143 __le16 CopyCount;
1144 __u16 ByteCount;
1145 __u8 BufferFormat;
1146 unsigned char ErrorFileName[1];
1147 } __attribute__((packed)) COPY_RSP;
1148
1149 #define CREATE_HARD_LINK 0x103
1150 #define MOVEFILE_COPY_ALLOWED 0x0002
1151 #define MOVEFILE_REPLACE_EXISTING 0x0001
1152
1153 typedef struct smb_com_nt_rename_req {
1154 struct smb_hdr hdr;
1155 __le16 SearchAttributes;
1156 __le16 Flags;
1157 __le32 ClusterCount;
1158 __le16 ByteCount;
1159 __u8 BufferFormat;
1160 unsigned char OldFileName[1];
1161
1162
1163 } __attribute__((packed)) NT_RENAME_REQ;
1164
1165 typedef struct smb_com_rename_rsp {
1166 struct smb_hdr hdr;
1167 __u16 ByteCount;
1168 } __attribute__((packed)) RENAME_RSP;
1169
1170 typedef struct smb_com_delete_file_req {
1171 struct smb_hdr hdr;
1172 __le16 SearchAttributes;
1173 __le16 ByteCount;
1174 __u8 BufferFormat;
1175 unsigned char fileName[1];
1176 } __attribute__((packed)) DELETE_FILE_REQ;
1177
1178 typedef struct smb_com_delete_file_rsp {
1179 struct smb_hdr hdr;
1180 __u16 ByteCount;
1181 } __attribute__((packed)) DELETE_FILE_RSP;
1182
1183 typedef struct smb_com_delete_directory_req {
1184 struct smb_hdr hdr;
1185 __le16 ByteCount;
1186 __u8 BufferFormat;
1187 unsigned char DirName[1];
1188 } __attribute__((packed)) DELETE_DIRECTORY_REQ;
1189
1190 typedef struct smb_com_delete_directory_rsp {
1191 struct smb_hdr hdr;
1192 __u16 ByteCount;
1193 } __attribute__((packed)) DELETE_DIRECTORY_RSP;
1194
1195 typedef struct smb_com_create_directory_req {
1196 struct smb_hdr hdr;
1197 __le16 ByteCount;
1198 __u8 BufferFormat;
1199 unsigned char DirName[1];
1200 } __attribute__((packed)) CREATE_DIRECTORY_REQ;
1201
1202 typedef struct smb_com_create_directory_rsp {
1203 struct smb_hdr hdr;
1204 __u16 ByteCount;
1205 } __attribute__((packed)) CREATE_DIRECTORY_RSP;
1206
1207 typedef struct smb_com_query_information_req {
1208 struct smb_hdr hdr;
1209 __le16 ByteCount;
1210 __u8 BufferFormat;
1211 unsigned char FileName[1];
1212 } __attribute__((packed)) QUERY_INFORMATION_REQ;
1213
1214 typedef struct smb_com_query_information_rsp {
1215 struct smb_hdr hdr;
1216 __le16 attr;
1217 __le32 last_write_time;
1218 __le32 size;
1219 __u16 reserved[5];
1220 __le16 ByteCount;
1221 } __attribute__((packed)) QUERY_INFORMATION_RSP;
1222
1223 typedef struct smb_com_setattr_req {
1224 struct smb_hdr hdr;
1225 __le16 attr;
1226 __le16 time_low;
1227 __le16 time_high;
1228 __le16 reserved[5];
1229 __u16 ByteCount;
1230 __u8 BufferFormat;
1231 unsigned char fileName[1];
1232 } __attribute__((packed)) SETATTR_REQ;
1233
1234 typedef struct smb_com_setattr_rsp {
1235 struct smb_hdr hdr;
1236 __u16 ByteCount;
1237 } __attribute__((packed)) SETATTR_RSP;
1238
1239
1240
1241
1242
1243
1244
1245
1246 typedef struct smb_com_ntransact_req {
1247 struct smb_hdr hdr;
1248 __u8 MaxSetupCount;
1249 __u16 Reserved;
1250 __le32 TotalParameterCount;
1251 __le32 TotalDataCount;
1252 __le32 MaxParameterCount;
1253 __le32 MaxDataCount;
1254 __le32 ParameterCount;
1255 __le32 ParameterOffset;
1256 __le32 DataCount;
1257 __le32 DataOffset;
1258 __u8 SetupCount;
1259
1260 __le16 SubCommand;
1261
1262 __le16 ByteCount;
1263 __u8 Pad[3];
1264 __u8 Parms[];
1265 } __attribute__((packed)) NTRANSACT_REQ;
1266
1267 typedef struct smb_com_ntransact_rsp {
1268 struct smb_hdr hdr;
1269 __u8 Reserved[3];
1270 __le32 TotalParameterCount;
1271 __le32 TotalDataCount;
1272 __le32 ParameterCount;
1273 __le32 ParameterOffset;
1274 __le32 ParameterDisplacement;
1275 __le32 DataCount;
1276 __le32 DataOffset;
1277 __le32 DataDisplacement;
1278 __u8 SetupCount;
1279 __u16 ByteCount;
1280
1281
1282 } __attribute__((packed)) NTRANSACT_RSP;
1283
1284
1285 struct srv_copychunk {
1286 __le64 SourceOffset;
1287 __le64 DestinationOffset;
1288 __le32 CopyLength;
1289 __u32 Reserved;
1290 } __packed;
1291
1292 typedef struct smb_com_transaction_ioctl_req {
1293 struct smb_hdr hdr;
1294 __u8 MaxSetupCount;
1295 __u16 Reserved;
1296 __le32 TotalParameterCount;
1297 __le32 TotalDataCount;
1298 __le32 MaxParameterCount;
1299 __le32 MaxDataCount;
1300 __le32 ParameterCount;
1301 __le32 ParameterOffset;
1302 __le32 DataCount;
1303 __le32 DataOffset;
1304 __u8 SetupCount;
1305
1306 __le16 SubCommand;
1307 __le32 FunctionCode;
1308 __u16 Fid;
1309 __u8 IsFsctl;
1310 __u8 IsRootFlag;
1311 __le16 ByteCount;
1312 __u8 Pad[3];
1313 __u8 Data[1];
1314 } __attribute__((packed)) TRANSACT_IOCTL_REQ;
1315
1316 typedef struct smb_com_transaction_compr_ioctl_req {
1317 struct smb_hdr hdr;
1318 __u8 MaxSetupCount;
1319 __u16 Reserved;
1320 __le32 TotalParameterCount;
1321 __le32 TotalDataCount;
1322 __le32 MaxParameterCount;
1323 __le32 MaxDataCount;
1324 __le32 ParameterCount;
1325 __le32 ParameterOffset;
1326 __le32 DataCount;
1327 __le32 DataOffset;
1328 __u8 SetupCount;
1329
1330 __le16 SubCommand;
1331 __le32 FunctionCode;
1332 __u16 Fid;
1333 __u8 IsFsctl;
1334 __u8 IsRootFlag;
1335 __le16 ByteCount;
1336 __u8 Pad[3];
1337 __le16 compression_state;
1338 } __attribute__((packed)) TRANSACT_COMPR_IOCTL_REQ;
1339
1340
1341 #define COMPRESSION_FORMAT_NONE 0x0000
1342 #define COMPRESSION_FORMAT_DEFAULT 0x0001
1343 #define COMPRESSION_FORMAT_LZNT1 0x0002
1344
1345 typedef struct smb_com_transaction_ioctl_rsp {
1346 struct smb_hdr hdr;
1347 __u8 Reserved[3];
1348 __le32 TotalParameterCount;
1349 __le32 TotalDataCount;
1350 __le32 ParameterCount;
1351 __le32 ParameterOffset;
1352 __le32 ParameterDisplacement;
1353 __le32 DataCount;
1354 __le32 DataOffset;
1355 __le32 DataDisplacement;
1356 __u8 SetupCount;
1357 __le16 ReturnedDataLen;
1358 __u16 ByteCount;
1359 } __attribute__((packed)) TRANSACT_IOCTL_RSP;
1360
1361 #define CIFS_ACL_OWNER 1
1362 #define CIFS_ACL_GROUP 2
1363 #define CIFS_ACL_DACL 4
1364 #define CIFS_ACL_SACL 8
1365
1366 typedef struct smb_com_transaction_qsec_req {
1367 struct smb_hdr hdr;
1368 __u8 MaxSetupCount;
1369 __u16 Reserved;
1370 __le32 TotalParameterCount;
1371 __le32 TotalDataCount;
1372 __le32 MaxParameterCount;
1373 __le32 MaxDataCount;
1374 __le32 ParameterCount;
1375 __le32 ParameterOffset;
1376 __le32 DataCount;
1377 __le32 DataOffset;
1378 __u8 SetupCount;
1379
1380 __le16 SubCommand;
1381 __le16 ByteCount;
1382 __u8 Pad[3];
1383 __u16 Fid;
1384 __u16 Reserved2;
1385 __le32 AclFlags;
1386 } __attribute__((packed)) QUERY_SEC_DESC_REQ;
1387
1388
1389 typedef struct smb_com_transaction_ssec_req {
1390 struct smb_hdr hdr;
1391 __u8 MaxSetupCount;
1392 __u16 Reserved;
1393 __le32 TotalParameterCount;
1394 __le32 TotalDataCount;
1395 __le32 MaxParameterCount;
1396 __le32 MaxDataCount;
1397 __le32 ParameterCount;
1398 __le32 ParameterOffset;
1399 __le32 DataCount;
1400 __le32 DataOffset;
1401 __u8 SetupCount;
1402
1403 __le16 SubCommand;
1404 __le16 ByteCount;
1405 __u8 Pad[3];
1406 __u16 Fid;
1407 __u16 Reserved2;
1408 __le32 AclFlags;
1409 } __attribute__((packed)) SET_SEC_DESC_REQ;
1410
1411 typedef struct smb_com_transaction_change_notify_req {
1412 struct smb_hdr hdr;
1413 __u8 MaxSetupCount;
1414 __u16 Reserved;
1415 __le32 TotalParameterCount;
1416 __le32 TotalDataCount;
1417 __le32 MaxParameterCount;
1418 __le32 MaxDataCount;
1419 __le32 ParameterCount;
1420 __le32 ParameterOffset;
1421 __le32 DataCount;
1422 __le32 DataOffset;
1423 __u8 SetupCount;
1424
1425 __le16 SubCommand;
1426 __le32 CompletionFilter;
1427 __u16 Fid;
1428 __u8 WatchTree;
1429 __u8 Reserved2;
1430 __le16 ByteCount;
1431
1432
1433 } __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_REQ;
1434
1435
1436
1437 typedef struct smb_com_transaction_change_notify_rsp {
1438 struct smb_hdr hdr;
1439 __u8 Reserved[3];
1440 __le32 TotalParameterCount;
1441 __le32 TotalDataCount;
1442 __le32 ParameterCount;
1443 __le32 ParameterOffset;
1444 __le32 ParameterDisplacement;
1445 __le32 DataCount;
1446 __le32 DataOffset;
1447 __le32 DataDisplacement;
1448 __u8 SetupCount;
1449 __u16 ByteCount;
1450
1451 } __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_RSP;
1452
1453 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
1454 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
1455 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
1456 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
1457 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
1458 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
1459 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
1460 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
1461 #define FILE_NOTIFY_CHANGE_EA 0x00000080
1462 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
1463 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
1464 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
1465 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
1466
1467 #define FILE_ACTION_ADDED 0x00000001
1468 #define FILE_ACTION_REMOVED 0x00000002
1469 #define FILE_ACTION_MODIFIED 0x00000003
1470 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1471 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1472 #define FILE_ACTION_ADDED_STREAM 0x00000006
1473 #define FILE_ACTION_REMOVED_STREAM 0x00000007
1474 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
1475
1476
1477 struct file_notify_information {
1478 __le32 NextEntryOffset;
1479 __le32 Action;
1480 __le32 FileNameLength;
1481 __u8 FileName[];
1482 } __attribute__((packed));
1483
1484
1485 struct reparse_symlink_data {
1486 __le32 ReparseTag;
1487 __le16 ReparseDataLength;
1488 __u16 Reserved;
1489 __le16 SubstituteNameOffset;
1490 __le16 SubstituteNameLength;
1491 __le16 PrintNameOffset;
1492 __le16 PrintNameLength;
1493 __le32 Flags;
1494 char PathBuffer[];
1495 } __attribute__((packed));
1496
1497
1498 #define SYMLINK_FLAG_RELATIVE 0x00000001
1499
1500
1501 #define NFS_SPECFILE_LNK 0x00000000014B4E4C
1502 #define NFS_SPECFILE_CHR 0x0000000000524843
1503 #define NFS_SPECFILE_BLK 0x00000000004B4C42
1504 #define NFS_SPECFILE_FIFO 0x000000004F464946
1505 #define NFS_SPECFILE_SOCK 0x000000004B434F53
1506 struct reparse_posix_data {
1507 __le32 ReparseTag;
1508 __le16 ReparseDataLength;
1509 __u16 Reserved;
1510 __le64 InodeType;
1511 char PathBuffer[];
1512 } __attribute__((packed));
1513
1514 struct cifs_quota_data {
1515 __u32 rsrvd1;
1516 __u32 sid_size;
1517 __u64 rsrvd2;
1518 __u64 space_used;
1519 __u64 soft_limit;
1520 __u64 hard_limit;
1521 char sid[1];
1522 } __attribute__((packed));
1523
1524
1525 #define QUOTA_LIST_CONTINUE 0
1526 #define QUOTA_LIST_START 0x100
1527 #define QUOTA_FOR_SID 0x101
1528
1529 struct trans2_req {
1530
1531 __le16 TotalParameterCount;
1532 __le16 TotalDataCount;
1533 __le16 MaxParameterCount;
1534 __le16 MaxDataCount;
1535 __u8 MaxSetupCount;
1536 __u8 Reserved;
1537 __le16 Flags;
1538 __le32 Timeout;
1539 __u16 Reserved2;
1540 __le16 ParameterCount;
1541 __le16 ParameterOffset;
1542 __le16 DataCount;
1543 __le16 DataOffset;
1544 __u8 SetupCount;
1545 __u8 Reserved3;
1546 __le16 SubCommand;
1547 __le16 ByteCount;
1548 } __attribute__((packed));
1549
1550 struct smb_t2_req {
1551 struct smb_hdr hdr;
1552 struct trans2_req t2_req;
1553 } __attribute__((packed));
1554
1555 struct trans2_resp {
1556
1557 __le16 TotalParameterCount;
1558 __le16 TotalDataCount;
1559 __u16 Reserved;
1560 __le16 ParameterCount;
1561 __le16 ParameterOffset;
1562 __le16 ParameterDisplacement;
1563 __le16 DataCount;
1564 __le16 DataOffset;
1565 __le16 DataDisplacement;
1566 __u8 SetupCount;
1567 __u8 Reserved1;
1568
1569
1570
1571
1572 } __attribute__((packed));
1573
1574 struct smb_t2_rsp {
1575 struct smb_hdr hdr;
1576 struct trans2_resp t2_rsp;
1577 } __attribute__((packed));
1578
1579
1580 #define SMB_INFO_STANDARD 1
1581 #define SMB_SET_FILE_EA 2
1582 #define SMB_QUERY_FILE_EA_SIZE 2
1583 #define SMB_INFO_QUERY_EAS_FROM_LIST 3
1584 #define SMB_INFO_QUERY_ALL_EAS 4
1585 #define SMB_INFO_IS_NAME_VALID 6
1586 #define SMB_QUERY_FILE_BASIC_INFO 0x101
1587 #define SMB_QUERY_FILE_STANDARD_INFO 0x102
1588 #define SMB_QUERY_FILE_EA_INFO 0x103
1589 #define SMB_QUERY_FILE_NAME_INFO 0x104
1590 #define SMB_QUERY_FILE_ALLOCATION_INFO 0x105
1591 #define SMB_QUERY_FILE_END_OF_FILEINFO 0x106
1592 #define SMB_QUERY_FILE_ALL_INFO 0x107
1593 #define SMB_QUERY_ALT_NAME_INFO 0x108
1594 #define SMB_QUERY_FILE_STREAM_INFO 0x109
1595 #define SMB_QUERY_FILE_COMPRESSION_INFO 0x10B
1596 #define SMB_QUERY_FILE_UNIX_BASIC 0x200
1597 #define SMB_QUERY_FILE_UNIX_LINK 0x201
1598 #define SMB_QUERY_POSIX_ACL 0x204
1599 #define SMB_QUERY_XATTR 0x205
1600 #define SMB_QUERY_ATTR_FLAGS 0x206
1601 #define SMB_QUERY_POSIX_PERMISSION 0x207
1602 #define SMB_QUERY_POSIX_LOCK 0x208
1603
1604
1605 #define SMB_QUERY_FILE__UNIX_INFO2 0x20b
1606 #define SMB_QUERY_FILE_INTERNAL_INFO 0x3ee
1607 #define SMB_QUERY_FILE_ACCESS_INFO 0x3f0
1608 #define SMB_QUERY_FILE_NAME_INFO2 0x3f1
1609 #define SMB_QUERY_FILE_POSITION_INFO 0x3f6
1610 #define SMB_QUERY_FILE_MODE_INFO 0x3f8
1611 #define SMB_QUERY_FILE_ALGN_INFO 0x3f9
1612
1613
1614 #define SMB_SET_FILE_BASIC_INFO 0x101
1615 #define SMB_SET_FILE_DISPOSITION_INFO 0x102
1616 #define SMB_SET_FILE_ALLOCATION_INFO 0x103
1617 #define SMB_SET_FILE_END_OF_FILE_INFO 0x104
1618 #define SMB_SET_FILE_UNIX_BASIC 0x200
1619 #define SMB_SET_FILE_UNIX_LINK 0x201
1620 #define SMB_SET_FILE_UNIX_HLINK 0x203
1621 #define SMB_SET_POSIX_ACL 0x204
1622 #define SMB_SET_XATTR 0x205
1623 #define SMB_SET_ATTR_FLAGS 0x206
1624 #define SMB_SET_POSIX_LOCK 0x208
1625 #define SMB_POSIX_OPEN 0x209
1626 #define SMB_POSIX_UNLINK 0x20a
1627 #define SMB_SET_FILE_UNIX_INFO2 0x20b
1628 #define SMB_SET_FILE_BASIC_INFO2 0x3ec
1629 #define SMB_SET_FILE_RENAME_INFORMATION 0x3f2
1630 #define SMB_FILE_ALL_INFO2 0x3fa
1631 #define SMB_SET_FILE_ALLOCATION_INFO2 0x3fb
1632 #define SMB_SET_FILE_END_OF_FILE_INFO2 0x3fc
1633 #define SMB_FILE_MOVE_CLUSTER_INFO 0x407
1634 #define SMB_FILE_QUOTA_INFO 0x408
1635 #define SMB_FILE_REPARSEPOINT_INFO 0x409
1636 #define SMB_FILE_MAXIMUM_INFO 0x40d
1637
1638
1639 #define SMB_FIND_FILE_INFO_STANDARD 0x001
1640 #define SMB_FIND_FILE_QUERY_EA_SIZE 0x002
1641 #define SMB_FIND_FILE_QUERY_EAS_FROM_LIST 0x003
1642 #define SMB_FIND_FILE_DIRECTORY_INFO 0x101
1643 #define SMB_FIND_FILE_FULL_DIRECTORY_INFO 0x102
1644 #define SMB_FIND_FILE_NAMES_INFO 0x103
1645 #define SMB_FIND_FILE_BOTH_DIRECTORY_INFO 0x104
1646 #define SMB_FIND_FILE_ID_FULL_DIR_INFO 0x105
1647 #define SMB_FIND_FILE_ID_BOTH_DIR_INFO 0x106
1648 #define SMB_FIND_FILE_UNIX 0x202
1649
1650
1651 typedef struct smb_com_transaction2_qpi_req {
1652 struct smb_hdr hdr;
1653 __le16 TotalParameterCount;
1654 __le16 TotalDataCount;
1655 __le16 MaxParameterCount;
1656 __le16 MaxDataCount;
1657 __u8 MaxSetupCount;
1658 __u8 Reserved;
1659 __le16 Flags;
1660 __le32 Timeout;
1661 __u16 Reserved2;
1662 __le16 ParameterCount;
1663 __le16 ParameterOffset;
1664 __le16 DataCount;
1665 __le16 DataOffset;
1666 __u8 SetupCount;
1667 __u8 Reserved3;
1668 __le16 SubCommand;
1669 __le16 ByteCount;
1670 __u8 Pad;
1671 __le16 InformationLevel;
1672 __u32 Reserved4;
1673 char FileName[1];
1674 } __attribute__((packed)) TRANSACTION2_QPI_REQ;
1675
1676 typedef struct smb_com_transaction2_qpi_rsp {
1677 struct smb_hdr hdr;
1678 struct trans2_resp t2;
1679 __u16 ByteCount;
1680 __u16 Reserved2;
1681 } __attribute__((packed)) TRANSACTION2_QPI_RSP;
1682
1683 typedef struct smb_com_transaction2_spi_req {
1684 struct smb_hdr hdr;
1685 __le16 TotalParameterCount;
1686 __le16 TotalDataCount;
1687 __le16 MaxParameterCount;
1688 __le16 MaxDataCount;
1689 __u8 MaxSetupCount;
1690 __u8 Reserved;
1691 __le16 Flags;
1692 __le32 Timeout;
1693 __u16 Reserved2;
1694 __le16 ParameterCount;
1695 __le16 ParameterOffset;
1696 __le16 DataCount;
1697 __le16 DataOffset;
1698 __u8 SetupCount;
1699 __u8 Reserved3;
1700 __le16 SubCommand;
1701 __le16 ByteCount;
1702 __u8 Pad;
1703 __u16 Pad1;
1704 __le16 InformationLevel;
1705 __u32 Reserved4;
1706 char FileName[1];
1707 } __attribute__((packed)) TRANSACTION2_SPI_REQ;
1708
1709 typedef struct smb_com_transaction2_spi_rsp {
1710 struct smb_hdr hdr;
1711 struct trans2_resp t2;
1712 __u16 ByteCount;
1713 __u16 Reserved2;
1714 } __attribute__((packed)) TRANSACTION2_SPI_RSP;
1715
1716 struct set_file_rename {
1717 __le32 overwrite;
1718 __u32 root_fid;
1719 __le32 target_name_len;
1720 char target_name[];
1721 } __attribute__((packed));
1722
1723 struct smb_com_transaction2_sfi_req {
1724 struct smb_hdr hdr;
1725 __le16 TotalParameterCount;
1726 __le16 TotalDataCount;
1727 __le16 MaxParameterCount;
1728 __le16 MaxDataCount;
1729 __u8 MaxSetupCount;
1730 __u8 Reserved;
1731 __le16 Flags;
1732 __le32 Timeout;
1733 __u16 Reserved2;
1734 __le16 ParameterCount;
1735 __le16 ParameterOffset;
1736 __le16 DataCount;
1737 __le16 DataOffset;
1738 __u8 SetupCount;
1739 __u8 Reserved3;
1740 __le16 SubCommand;
1741 __le16 ByteCount;
1742 __u8 Pad;
1743 __u16 Pad1;
1744 __u16 Fid;
1745 __le16 InformationLevel;
1746 __u16 Reserved4;
1747 __u8 payload[];
1748 } __attribute__((packed));
1749
1750 struct smb_com_transaction2_sfi_rsp {
1751 struct smb_hdr hdr;
1752 struct trans2_resp t2;
1753 __u16 ByteCount;
1754 __u16 Reserved2;
1755
1756 } __attribute__((packed));
1757
1758 struct smb_t2_qfi_req {
1759 struct smb_hdr hdr;
1760 struct trans2_req t2;
1761 __u8 Pad;
1762 __u16 Fid;
1763 __le16 InformationLevel;
1764 } __attribute__((packed));
1765
1766 struct smb_t2_qfi_rsp {
1767 struct smb_hdr hdr;
1768 struct trans2_resp t2;
1769 __u16 ByteCount;
1770 __u16 Reserved2;
1771
1772 } __attribute__((packed));
1773
1774
1775
1776
1777 #define CIFS_SEARCH_CLOSE_ALWAYS 0x0001
1778 #define CIFS_SEARCH_CLOSE_AT_END 0x0002
1779 #define CIFS_SEARCH_RETURN_RESUME 0x0004
1780 #define CIFS_SEARCH_CONTINUE_FROM_LAST 0x0008
1781 #define CIFS_SEARCH_BACKUP_SEARCH 0x0010
1782
1783
1784
1785
1786 #define CIFS_SMB_RESUME_KEY_SIZE 4
1787
1788 typedef struct smb_com_transaction2_ffirst_req {
1789 struct smb_hdr hdr;
1790 __le16 TotalParameterCount;
1791 __le16 TotalDataCount;
1792 __le16 MaxParameterCount;
1793 __le16 MaxDataCount;
1794 __u8 MaxSetupCount;
1795 __u8 Reserved;
1796 __le16 Flags;
1797 __le32 Timeout;
1798 __u16 Reserved2;
1799 __le16 ParameterCount;
1800 __le16 ParameterOffset;
1801 __le16 DataCount;
1802 __le16 DataOffset;
1803 __u8 SetupCount;
1804 __u8 Reserved3;
1805 __le16 SubCommand;
1806 __le16 ByteCount;
1807 __u8 Pad;
1808 __le16 SearchAttributes;
1809 __le16 SearchCount;
1810 __le16 SearchFlags;
1811 __le16 InformationLevel;
1812 __le32 SearchStorageType;
1813 char FileName[1];
1814 } __attribute__((packed)) TRANSACTION2_FFIRST_REQ;
1815
1816 typedef struct smb_com_transaction2_ffirst_rsp {
1817 struct smb_hdr hdr;
1818 struct trans2_resp t2;
1819 __u16 ByteCount;
1820 } __attribute__((packed)) TRANSACTION2_FFIRST_RSP;
1821
1822 typedef struct smb_com_transaction2_ffirst_rsp_parms {
1823 __u16 SearchHandle;
1824 __le16 SearchCount;
1825 __le16 EndofSearch;
1826 __le16 EAErrorOffset;
1827 __le16 LastNameOffset;
1828 } __attribute__((packed)) T2_FFIRST_RSP_PARMS;
1829
1830 typedef struct smb_com_transaction2_fnext_req {
1831 struct smb_hdr hdr;
1832 __le16 TotalParameterCount;
1833 __le16 TotalDataCount;
1834 __le16 MaxParameterCount;
1835 __le16 MaxDataCount;
1836 __u8 MaxSetupCount;
1837 __u8 Reserved;
1838 __le16 Flags;
1839 __le32 Timeout;
1840 __u16 Reserved2;
1841 __le16 ParameterCount;
1842 __le16 ParameterOffset;
1843 __le16 DataCount;
1844 __le16 DataOffset;
1845 __u8 SetupCount;
1846 __u8 Reserved3;
1847 __le16 SubCommand;
1848 __le16 ByteCount;
1849 __u8 Pad;
1850 __u16 SearchHandle;
1851 __le16 SearchCount;
1852 __le16 InformationLevel;
1853 __u32 ResumeKey;
1854 __le16 SearchFlags;
1855 char ResumeFileName[];
1856 } __attribute__((packed)) TRANSACTION2_FNEXT_REQ;
1857
1858 typedef struct smb_com_transaction2_fnext_rsp {
1859 struct smb_hdr hdr;
1860 struct trans2_resp t2;
1861 __u16 ByteCount;
1862 } __attribute__((packed)) TRANSACTION2_FNEXT_RSP;
1863
1864 typedef struct smb_com_transaction2_fnext_rsp_parms {
1865 __le16 SearchCount;
1866 __le16 EndofSearch;
1867 __le16 EAErrorOffset;
1868 __le16 LastNameOffset;
1869 } __attribute__((packed)) T2_FNEXT_RSP_PARMS;
1870
1871
1872 #define SMB_INFO_ALLOCATION 1
1873 #define SMB_INFO_VOLUME 2
1874 #define SMB_QUERY_FS_VOLUME_INFO 0x102
1875 #define SMB_QUERY_FS_SIZE_INFO 0x103
1876 #define SMB_QUERY_FS_DEVICE_INFO 0x104
1877 #define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105
1878 #define SMB_QUERY_CIFS_UNIX_INFO 0x200
1879 #define SMB_QUERY_POSIX_FS_INFO 0x201
1880 #define SMB_QUERY_POSIX_WHO_AM_I 0x202
1881 #define SMB_REQUEST_TRANSPORT_ENCRYPTION 0x203
1882 #define SMB_QUERY_FS_PROXY 0x204
1883
1884
1885
1886
1887 #define SMB_QUERY_LABEL_INFO 0x3ea
1888 #define SMB_QUERY_FS_QUOTA_INFO 0x3ee
1889 #define SMB_QUERY_FS_FULL_SIZE_INFO 0x3ef
1890 #define SMB_QUERY_OBJECTID_INFO 0x3f0
1891
1892 typedef struct smb_com_transaction2_qfsi_req {
1893 struct smb_hdr hdr;
1894 __le16 TotalParameterCount;
1895 __le16 TotalDataCount;
1896 __le16 MaxParameterCount;
1897 __le16 MaxDataCount;
1898 __u8 MaxSetupCount;
1899 __u8 Reserved;
1900 __le16 Flags;
1901 __le32 Timeout;
1902 __u16 Reserved2;
1903 __le16 ParameterCount;
1904 __le16 ParameterOffset;
1905 __le16 DataCount;
1906 __le16 DataOffset;
1907 __u8 SetupCount;
1908 __u8 Reserved3;
1909 __le16 SubCommand;
1910 __le16 ByteCount;
1911 __u8 Pad;
1912 __le16 InformationLevel;
1913 } __attribute__((packed)) TRANSACTION2_QFSI_REQ;
1914
1915 typedef struct smb_com_transaction_qfsi_rsp {
1916 struct smb_hdr hdr;
1917 struct trans2_resp t2;
1918 __u16 ByteCount;
1919 __u8 Pad;
1920 } __attribute__((packed)) TRANSACTION2_QFSI_RSP;
1921
1922 typedef struct whoami_rsp_data {
1923 __u32 flags;
1924 __u32 mask;
1925 __u64 unix_user_id;
1926 __u64 unix_user_gid;
1927 __u32 number_of_supplementary_gids;
1928 __u32 number_of_sids;
1929 __u32 length_of_sid_array;
1930 __u32 pad;
1931
1932
1933 } __attribute__((packed)) WHOAMI_RSP_DATA;
1934
1935
1936 #define SMB_SET_CIFS_UNIX_INFO 0x200
1937
1938
1939
1940
1941 typedef struct smb_com_transaction2_setfsi_req {
1942 struct smb_hdr hdr;
1943 __le16 TotalParameterCount;
1944 __le16 TotalDataCount;
1945 __le16 MaxParameterCount;
1946 __le16 MaxDataCount;
1947 __u8 MaxSetupCount;
1948 __u8 Reserved;
1949 __le16 Flags;
1950 __le32 Timeout;
1951 __u16 Reserved2;
1952 __le16 ParameterCount;
1953 __le16 ParameterOffset;
1954 __le16 DataCount;
1955 __le16 DataOffset;
1956 __u8 SetupCount;
1957 __u8 Reserved3;
1958 __le16 SubCommand;
1959 __le16 ByteCount;
1960 __u8 Pad;
1961 __u16 FileNum;
1962 __le16 InformationLevel;
1963 __le16 ClientUnixMajor;
1964 __le16 ClientUnixMinor;
1965 __le64 ClientUnixCap;
1966 } __attribute__((packed)) TRANSACTION2_SETFSI_REQ;
1967
1968
1969 typedef struct smb_com_transaction2_setfs_enc_req {
1970 struct smb_hdr hdr;
1971 __le16 TotalParameterCount;
1972 __le16 TotalDataCount;
1973 __le16 MaxParameterCount;
1974 __le16 MaxDataCount;
1975 __u8 MaxSetupCount;
1976 __u8 Reserved;
1977 __le16 Flags;
1978 __le32 Timeout;
1979 __u16 Reserved2;
1980 __le16 ParameterCount;
1981 __le16 ParameterOffset;
1982 __le16 DataCount;
1983 __le16 DataOffset;
1984 __u8 SetupCount;
1985 __u8 Reserved3;
1986 __le16 SubCommand;
1987 __le16 ByteCount;
1988 __u8 Pad;
1989 __u16 Reserved4;
1990 __le16 InformationLevel;
1991
1992 } __attribute__((packed)) TRANSACTION2_SETFSI_ENC_REQ;
1993
1994
1995 typedef struct smb_com_transaction2_setfsi_rsp {
1996 struct smb_hdr hdr;
1997 struct trans2_resp t2;
1998 __u16 ByteCount;
1999 } __attribute__((packed)) TRANSACTION2_SETFSI_RSP;
2000
2001 typedef struct smb_com_transaction2_get_dfs_refer_req {
2002 struct smb_hdr hdr;
2003 __le16 TotalParameterCount;
2004 __le16 TotalDataCount;
2005 __le16 MaxParameterCount;
2006 __le16 MaxDataCount;
2007 __u8 MaxSetupCount;
2008 __u8 Reserved;
2009 __le16 Flags;
2010 __le32 Timeout;
2011 __u16 Reserved2;
2012 __le16 ParameterCount;
2013 __le16 ParameterOffset;
2014 __le16 DataCount;
2015 __le16 DataOffset;
2016 __u8 SetupCount;
2017 __u8 Reserved3;
2018 __le16 SubCommand;
2019 __le16 ByteCount;
2020 __u8 Pad[3];
2021
2022
2023 __le16 MaxReferralLevel;
2024 char RequestFileName[1];
2025 } __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ;
2026
2027 #define DFS_VERSION cpu_to_le16(0x0003)
2028
2029
2030 #define DFS_TYPE_LINK 0x0000
2031 #define DFS_TYPE_ROOT 0x0001
2032
2033
2034 #define DFS_NAME_LIST_REF 0x0200
2035 #define DFS_TARGET_SET_BOUNDARY 0x0400
2036
2037 typedef struct dfs_referral_level_3 {
2038 __le16 VersionNumber;
2039 __le16 Size;
2040 __le16 ServerType;
2041 __le16 ReferralEntryFlags;
2042 __le32 TimeToLive;
2043 __le16 DfsPathOffset;
2044 __le16 DfsAlternatePathOffset;
2045 __le16 NetworkAddressOffset;
2046 __u8 ServiceSiteGuid[16];
2047 } __attribute__((packed)) REFERRAL3;
2048
2049 struct get_dfs_referral_rsp {
2050 __le16 PathConsumed;
2051 __le16 NumberOfReferrals;
2052 __le32 DFSFlags;
2053 REFERRAL3 referrals[1];
2054
2055 } __packed;
2056
2057 typedef struct smb_com_transaction_get_dfs_refer_rsp {
2058 struct smb_hdr hdr;
2059 struct trans2_resp t2;
2060 __u16 ByteCount;
2061 __u8 Pad;
2062 struct get_dfs_referral_rsp dfs_data;
2063 } __packed TRANSACTION2_GET_DFS_REFER_RSP;
2064
2065
2066 #define DFSREF_REFERRAL_SERVER 0x00000001
2067 #define DFSREF_STORAGE_SERVER 0x00000002
2068 #define DFSREF_TARGET_FAILBACK 0x00000004
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081 struct serverInfo {
2082 char name[16];
2083 unsigned char versionMajor;
2084 unsigned char versionMinor;
2085 unsigned long type;
2086 unsigned int commentOffset;
2087 } __attribute__((packed));
2088
2089
2090
2091
2092
2093
2094 struct shareInfo {
2095 char shareName[13];
2096 char pad;
2097 unsigned short type;
2098 unsigned int commentOffset;
2099 } __attribute__((packed));
2100
2101 struct aliasInfo {
2102 char aliasName[9];
2103 char pad;
2104 unsigned int commentOffset;
2105 unsigned char type[2];
2106 } __attribute__((packed));
2107
2108 struct aliasInfo92 {
2109 int aliasNameOffset;
2110 int serverNameOffset;
2111 int shareNameOffset;
2112 } __attribute__((packed));
2113
2114 typedef struct {
2115 __le64 TotalAllocationUnits;
2116 __le64 FreeAllocationUnits;
2117 __le32 SectorsPerAllocationUnit;
2118 __le32 BytesPerSector;
2119 } __attribute__((packed)) FILE_SYSTEM_INFO;
2120
2121 typedef struct {
2122 __le32 fsid;
2123 __le32 SectorsPerAllocationUnit;
2124 __le32 TotalAllocationUnits;
2125 __le32 FreeAllocationUnits;
2126 __le16 BytesPerSector;
2127 } __attribute__((packed)) FILE_SYSTEM_ALLOC_INFO;
2128
2129 typedef struct {
2130 __le16 MajorVersionNumber;
2131 __le16 MinorVersionNumber;
2132 __le64 Capability;
2133 } __attribute__((packed)) FILE_SYSTEM_UNIX_INFO;
2134
2135
2136 #define CIFS_UNIX_MAJOR_VERSION 1
2137 #define CIFS_UNIX_MINOR_VERSION 0
2138
2139
2140 #define CIFS_UNIX_FCNTL_CAP 0x00000001
2141 #define CIFS_UNIX_POSIX_ACL_CAP 0x00000002
2142 #define CIFS_UNIX_XATTR_CAP 0x00000004
2143 #define CIFS_UNIX_EXTATTR_CAP 0x00000008
2144 #define CIFS_UNIX_POSIX_PATHNAMES_CAP 0x00000010
2145 #define CIFS_UNIX_POSIX_PATH_OPS_CAP 0x00000020
2146
2147
2148 #define CIFS_UNIX_LARGE_READ_CAP 0x00000040
2149
2150 #define CIFS_UNIX_LARGE_WRITE_CAP 0x00000080
2151 #define CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP 0x00000100
2152 #define CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP 0x00000200
2153 #define CIFS_UNIX_PROXY_CAP 0x00000400
2154
2155 #ifdef CONFIG_CIFS_POSIX
2156
2157
2158
2159
2160
2161
2162 #define CIFS_UNIX_CAP_MASK 0x000003db
2163 #else
2164 #define CIFS_UNIX_CAP_MASK 0x00000013
2165 #endif
2166
2167
2168 #define CIFS_POSIX_EXTENSIONS 0x00000010
2169
2170 typedef struct {
2171
2172 __le32 OptimalTransferSize;
2173 __le32 BlockSize;
2174
2175
2176
2177
2178
2179
2180
2181 __le64 TotalBlocks;
2182 __le64 BlocksAvail;
2183 __le64 UserBlocksAvail;
2184
2185 __le64 TotalFileNodes;
2186 __le64 FreeFileNodes;
2187 __le64 FileSysIdentifier;
2188
2189
2190 } __attribute__((packed)) FILE_SYSTEM_POSIX_INFO;
2191
2192
2193 #define FILE_DEVICE_CD_ROM 0x00000002
2194 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
2195 #define FILE_DEVICE_DFS 0x00000006
2196 #define FILE_DEVICE_DISK 0x00000007
2197 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
2198 #define FILE_DEVICE_FILE_SYSTEM 0x00000009
2199 #define FILE_DEVICE_NAMED_PIPE 0x00000011
2200 #define FILE_DEVICE_NETWORK 0x00000012
2201 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
2202 #define FILE_DEVICE_NULL 0x00000015
2203 #define FILE_DEVICE_PARALLEL_PORT 0x00000016
2204 #define FILE_DEVICE_PRINTER 0x00000018
2205 #define FILE_DEVICE_SERIAL_PORT 0x0000001b
2206 #define FILE_DEVICE_STREAMS 0x0000001e
2207 #define FILE_DEVICE_TAPE 0x0000001f
2208 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
2209 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024
2210 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
2211
2212
2213 #define FILE_REMOVABLE_MEDIA 0x00000001
2214 #define FILE_READ_ONLY_DEVICE 0x00000002
2215 #define FILE_FLOPPY_DISKETTE 0x00000004
2216 #define FILE_WRITE_ONCE_MEDIA 0x00000008
2217 #define FILE_REMOTE_DEVICE 0x00000010
2218 #define FILE_DEVICE_IS_MOUNTED 0x00000020
2219 #define FILE_VIRTUAL_VOLUME 0x00000040
2220 #define FILE_DEVICE_SECURE_OPEN 0x00000100
2221 #define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000
2222 #define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000
2223 #define FILE_PORTABLE_DEVICE 0x00004000
2224 #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000
2225
2226 typedef struct {
2227 __le32 DeviceType;
2228 __le32 DeviceCharacteristics;
2229 } __attribute__((packed)) FILE_SYSTEM_DEVICE_INFO;
2230
2231
2232 #define MIN_FS_ATTR_INFO_SIZE 12
2233
2234
2235
2236 #define FILE_SUPPORTS_SPARSE_VDL 0x10000000
2237 #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
2238 #define FILE_SUPPORT_INTEGRITY_STREAMS 0x04000000
2239 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
2240 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
2241 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
2242 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
2243 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
2244 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
2245 #define FILE_READ_ONLY_VOLUME 0x00080000
2246 #define FILE_NAMED_STREAMS 0x00040000
2247 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
2248 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
2249 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
2250 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
2251 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
2252 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
2253 #define FILE_VOLUME_QUOTAS 0x00000020
2254 #define FILE_FILE_COMPRESSION 0x00000010
2255 #define FILE_PERSISTENT_ACLS 0x00000008
2256 #define FILE_UNICODE_ON_DISK 0x00000004
2257 #define FILE_CASE_PRESERVED_NAMES 0x00000002
2258 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
2259 typedef struct {
2260 __le32 Attributes;
2261 __le32 MaxPathNameComponentLength;
2262 __le32 FileSystemNameLen;
2263 char FileSystemName[52];
2264 } __attribute__((packed)) FILE_SYSTEM_ATTRIBUTE_INFO;
2265
2266
2267
2268
2269 typedef struct {
2270 __le64 CreationTime;
2271 __le64 LastAccessTime;
2272 __le64 LastWriteTime;
2273 __le64 ChangeTime;
2274 __le32 Attributes;
2275 __u32 Pad1;
2276 __le64 AllocationSize;
2277 __le64 EndOfFile;
2278 __le32 NumberOfLinks;
2279 __u8 DeletePending;
2280 __u8 Directory;
2281 __u16 Pad2;
2282 __le64 IndexNumber;
2283 __le32 EASize;
2284 __le32 AccessFlags;
2285 __u64 IndexNumber1;
2286 __le64 CurrentByteOffset;
2287 __le32 Mode;
2288 __le32 AlignmentRequirement;
2289 __le32 FileNameLength;
2290 char FileName[1];
2291 } __attribute__((packed)) FILE_ALL_INFO;
2292
2293 typedef struct {
2294 __le64 AllocationSize;
2295 __le64 EndOfFile;
2296 __le32 NumberOfLinks;
2297 __u8 DeletePending;
2298 __u8 Directory;
2299 __u16 Pad;
2300 } __attribute__((packed)) FILE_STANDARD_INFO;
2301
2302
2303
2304 #define UNIX_FILE 0
2305 #define UNIX_DIR 1
2306 #define UNIX_SYMLINK 2
2307 #define UNIX_CHARDEV 3
2308 #define UNIX_BLOCKDEV 4
2309 #define UNIX_FIFO 5
2310 #define UNIX_SOCKET 6
2311 typedef struct {
2312 __le64 EndOfFile;
2313 __le64 NumOfBytes;
2314 __le64 LastStatusChange;
2315 __le64 LastAccessTime;
2316 __le64 LastModificationTime;
2317 __le64 Uid;
2318 __le64 Gid;
2319 __le32 Type;
2320 __le64 DevMajor;
2321 __le64 DevMinor;
2322 __le64 UniqueId;
2323 __le64 Permissions;
2324 __le64 Nlinks;
2325 } __attribute__((packed)) FILE_UNIX_BASIC_INFO;
2326
2327 typedef struct {
2328 char LinkDest[1];
2329 } __attribute__((packed)) FILE_UNIX_LINK_INFO;
2330
2331
2332
2333
2334 typedef struct {
2335 __u16 Day:5;
2336 __u16 Month:4;
2337 __u16 Year:7;
2338 } __attribute__((packed)) SMB_DATE;
2339
2340 typedef struct {
2341 __u16 TwoSeconds:5;
2342 __u16 Minutes:6;
2343 __u16 Hours:5;
2344 } __attribute__((packed)) SMB_TIME;
2345
2346 typedef struct {
2347 __le16 CreationDate;
2348 __le16 CreationTime;
2349 __le16 LastAccessDate;
2350 __le16 LastAccessTime;
2351 __le16 LastWriteDate;
2352 __le16 LastWriteTime;
2353 __le32 DataSize;
2354 __le32 AllocationSize;
2355 __le16 Attributes;
2356 __le32 EASize;
2357 } __attribute__((packed)) FILE_INFO_STANDARD;
2358
2359 typedef struct {
2360 __le64 CreationTime;
2361 __le64 LastAccessTime;
2362 __le64 LastWriteTime;
2363 __le64 ChangeTime;
2364 __le32 Attributes;
2365 __u32 Pad;
2366 } __attribute__((packed)) FILE_BASIC_INFO;
2367
2368 struct file_allocation_info {
2369 __le64 AllocationSize;
2370 } __attribute__((packed));
2371
2372
2373 struct file_end_of_file_info {
2374 __le64 FileSize;
2375 } __attribute__((packed));
2376
2377 struct file_alt_name_info {
2378 __u8 alt_name[1];
2379 } __attribute__((packed));
2380
2381 struct file_stream_info {
2382 __le32 number_of_streams;
2383
2384
2385
2386
2387 };
2388
2389 struct file_compression_info {
2390 __le64 compressed_size;
2391 __le16 format;
2392 __u8 unit_shift;
2393 __u8 ch_shift;
2394 __u8 cl_shift;
2395 __u8 pad[3];
2396 } __attribute__((packed));
2397
2398
2399 #define CIFS_ACL_VERSION 1
2400 struct cifs_posix_ace {
2401 __u8 cifs_e_tag;
2402 __u8 cifs_e_perm;
2403 __le64 cifs_uid;
2404 } __attribute__((packed));
2405
2406 struct cifs_posix_acl {
2407 __le16 version;
2408 __le16 access_entry_count;
2409 __le16 default_entry_count;
2410 struct cifs_posix_ace ace_array[];
2411
2412
2413 } __attribute__((packed));
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431 #define SMB_O_RDONLY 0x1
2432 #define SMB_O_WRONLY 0x2
2433 #define SMB_O_RDWR 0x4
2434 #define SMB_O_CREAT 0x10
2435 #define SMB_O_EXCL 0x20
2436 #define SMB_O_TRUNC 0x40
2437 #define SMB_O_APPEND 0x80
2438 #define SMB_O_SYNC 0x100
2439 #define SMB_O_DIRECTORY 0x200
2440 #define SMB_O_NOFOLLOW 0x400
2441 #define SMB_O_DIRECT 0x800
2442
2443 typedef struct {
2444 __le32 OpenFlags;
2445 __le32 PosixOpenFlags;
2446 __le64 Permissions;
2447 __le16 Level;
2448 } __attribute__((packed)) OPEN_PSX_REQ;
2449
2450 typedef struct {
2451 __le16 OplockFlags;
2452 __u16 Fid;
2453 __le32 CreateAction;
2454 __le16 ReturnedLevel;
2455 __le16 Pad;
2456
2457 } __attribute__((packed)) OPEN_PSX_RSP;
2458
2459 #define SMB_POSIX_UNLINK_FILE_TARGET 0
2460 #define SMB_POSIX_UNLINK_DIRECTORY_TARGET 1
2461
2462 struct unlink_psx_rq {
2463 __le16 type;
2464 } __attribute__((packed));
2465
2466 struct file_internal_info {
2467 __le64 UniqueId;
2468 } __attribute__((packed));
2469
2470 struct file_mode_info {
2471 __le32 Mode;
2472 } __attribute__((packed));
2473
2474 struct file_attrib_tag {
2475 __le32 Attribute;
2476 __le32 ReparseTag;
2477 } __attribute__((packed));
2478
2479
2480
2481
2482
2483
2484 typedef struct {
2485 __le32 NextEntryOffset;
2486 __u32 ResumeKey;
2487 FILE_UNIX_BASIC_INFO basic;
2488 char FileName[1];
2489 } __attribute__((packed)) FILE_UNIX_INFO;
2490
2491 typedef struct {
2492 __le32 NextEntryOffset;
2493 __u32 FileIndex;
2494 __le64 CreationTime;
2495 __le64 LastAccessTime;
2496 __le64 LastWriteTime;
2497 __le64 ChangeTime;
2498 __le64 EndOfFile;
2499 __le64 AllocationSize;
2500 __le32 ExtFileAttributes;
2501 __le32 FileNameLength;
2502 char FileName[1];
2503 } __attribute__((packed)) FILE_DIRECTORY_INFO;
2504
2505 typedef struct {
2506 __le32 NextEntryOffset;
2507 __u32 FileIndex;
2508 __le64 CreationTime;
2509 __le64 LastAccessTime;
2510 __le64 LastWriteTime;
2511 __le64 ChangeTime;
2512 __le64 EndOfFile;
2513 __le64 AllocationSize;
2514 __le32 ExtFileAttributes;
2515 __le32 FileNameLength;
2516 __le32 EaSize;
2517 char FileName[1];
2518 } __attribute__((packed)) FILE_FULL_DIRECTORY_INFO;
2519
2520 typedef struct {
2521 __le32 NextEntryOffset;
2522 __u32 FileIndex;
2523 __le64 CreationTime;
2524 __le64 LastAccessTime;
2525 __le64 LastWriteTime;
2526 __le64 ChangeTime;
2527 __le64 EndOfFile;
2528 __le64 AllocationSize;
2529 __le32 ExtFileAttributes;
2530 __le32 FileNameLength;
2531 __le32 EaSize;
2532 __le32 Reserved;
2533 __le64 UniqueId;
2534 char FileName[1];
2535 } __attribute__((packed)) SEARCH_ID_FULL_DIR_INFO;
2536
2537 typedef struct {
2538 __le32 NextEntryOffset;
2539 __u32 FileIndex;
2540 __le64 CreationTime;
2541 __le64 LastAccessTime;
2542 __le64 LastWriteTime;
2543 __le64 ChangeTime;
2544 __le64 EndOfFile;
2545 __le64 AllocationSize;
2546 __le32 ExtFileAttributes;
2547 __le32 FileNameLength;
2548 __le32 EaSize;
2549 __u8 ShortNameLength;
2550 __u8 Reserved;
2551 __u8 ShortName[24];
2552 char FileName[1];
2553 } __attribute__((packed)) FILE_BOTH_DIRECTORY_INFO;
2554
2555 typedef struct {
2556 __u32 ResumeKey;
2557 __le16 CreationDate;
2558 __le16 CreationTime;
2559 __le16 LastAccessDate;
2560 __le16 LastAccessTime;
2561 __le16 LastWriteDate;
2562 __le16 LastWriteTime;
2563 __le32 DataSize;
2564 __le32 AllocationSize;
2565 __le16 Attributes;
2566 __u8 FileNameLength;
2567 char FileName[1];
2568 } __attribute__((packed)) FIND_FILE_STANDARD_INFO;
2569
2570
2571 struct win_dev {
2572 unsigned char type[8];
2573 __le64 major;
2574 __le64 minor;
2575 } __attribute__((packed));
2576
2577 struct gea {
2578 unsigned char name_len;
2579 char name[1];
2580 } __attribute__((packed));
2581
2582 struct gealist {
2583 unsigned long list_len;
2584 struct gea list[1];
2585 } __attribute__((packed));
2586
2587 struct fea {
2588 unsigned char EA_flags;
2589 __u8 name_len;
2590 __le16 value_len;
2591 char name[1];
2592
2593 } __attribute__((packed));
2594
2595 #define FEA_NEEDEA 0x80
2596
2597 struct fealist {
2598 __le32 list_len;
2599 struct fea list[1];
2600 } __attribute__((packed));
2601
2602
2603 struct data_blob {
2604 __u8 *data;
2605 size_t length;
2606 void (*free) (struct data_blob *data_blob);
2607 } __attribute__((packed));
2608
2609
2610 #ifdef CONFIG_CIFS_POSIX
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698 struct xsymlink {
2699
2700 char signature[4];
2701 char cr0;
2702
2703 char length[4];
2704 char cr1;
2705
2706 __u8 md5[32];
2707 char cr2;
2708
2709 char path[1024];
2710 } __attribute__((packed));
2711
2712 typedef struct file_xattr_info {
2713
2714 __u32 xattr_name_len;
2715 __u32 xattr_value_len;
2716 char xattr_name[];
2717
2718 } __attribute__((packed)) FILE_XATTR_INFO;
2719
2720
2721
2722
2723 typedef struct file_chattr_info {
2724 __le64 mask;
2725 __le64 mode;
2726 } __attribute__((packed)) FILE_CHATTR_INFO;
2727
2728 #endif
2729 #endif