Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    2)  *   fs/cifs/cifspdu.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    4)  *   Copyright (c) International Business Machines  Corp., 2002,2009
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    5)  *   Author(s): Steve French (sfrench@us.ibm.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    7)  *   This library is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    8)  *   it under the terms of the GNU Lesser General Public License as published
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    9)  *   by the Free Software Foundation; either version 2.1 of the License, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   10)  *   (at your option) any later version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   11)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   12)  *   This library is distributed in the hope that it will be useful,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   13)  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   14)  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   15)  *   the GNU Lesser General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   16)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   17)  *   You should have received a copy of the GNU Lesser General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   18)  *   along with this library; if not, write to the Free Software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   19)  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   20)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   22) #ifndef _CIFSPDU_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   23) #define _CIFSPDU_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   25) #include <net/sock.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   26) #include <asm/unaligned.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   27) #include "smbfsctl.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   29) #ifdef CONFIG_CIFS_WEAK_PW_HASH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   30) #define LANMAN_PROT 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   31) #define LANMAN2_PROT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   32) #define CIFS_PROT   2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   33) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   34) #define CIFS_PROT   0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   35) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   36) #define POSIX_PROT  (CIFS_PROT+1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   37) #define BAD_PROT 0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   39) /* SMB command codes:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   40)  * Note some commands have minimal (wct=0,bcc=0), or uninteresting, responses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   41)  * (ie which include no useful data other than the SMB error code itself).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   42)  * This can allow us to avoid response buffer allocations and copy in some cases
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   43)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   44) #define SMB_COM_CREATE_DIRECTORY      0x00 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   45) #define SMB_COM_DELETE_DIRECTORY      0x01 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   46) #define SMB_COM_CLOSE                 0x04 /* triv req/rsp, timestamp ignored */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   47) #define SMB_COM_FLUSH                 0x05 /* triv req/rsp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   48) #define SMB_COM_DELETE                0x06 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   49) #define SMB_COM_RENAME                0x07 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   50) #define SMB_COM_QUERY_INFORMATION     0x08 /* aka getattr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   51) #define SMB_COM_SETATTR               0x09 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   52) #define SMB_COM_LOCKING_ANDX          0x24 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   53) #define SMB_COM_COPY                  0x29 /* trivial rsp, fail filename ignrd*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   54) #define SMB_COM_ECHO                  0x2B /* echo request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   55) #define SMB_COM_OPEN_ANDX             0x2D /* Legacy open for old servers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   56) #define SMB_COM_READ_ANDX             0x2E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   57) #define SMB_COM_WRITE_ANDX            0x2F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   58) #define SMB_COM_TRANSACTION2          0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   59) #define SMB_COM_TRANSACTION2_SECONDARY 0x33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   60) #define SMB_COM_FIND_CLOSE2           0x34 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   61) #define SMB_COM_TREE_DISCONNECT       0x71 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   62) #define SMB_COM_NEGOTIATE             0x72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   63) #define SMB_COM_SESSION_SETUP_ANDX    0x73
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   64) #define SMB_COM_LOGOFF_ANDX           0x74 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   65) #define SMB_COM_TREE_CONNECT_ANDX     0x75
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   66) #define SMB_COM_NT_TRANSACT           0xA0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   67) #define SMB_COM_NT_TRANSACT_SECONDARY 0xA1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   68) #define SMB_COM_NT_CREATE_ANDX        0xA2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   69) #define SMB_COM_NT_CANCEL             0xA4 /* no response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   70) #define SMB_COM_NT_RENAME             0xA5 /* trivial response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   72) /* Transact2 subcommand codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   73) #define TRANS2_OPEN                   0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   74) #define TRANS2_FIND_FIRST             0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   75) #define TRANS2_FIND_NEXT              0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   76) #define TRANS2_QUERY_FS_INFORMATION   0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   77) #define TRANS2_SET_FS_INFORMATION     0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   78) #define TRANS2_QUERY_PATH_INFORMATION 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   79) #define TRANS2_SET_PATH_INFORMATION   0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   80) #define TRANS2_QUERY_FILE_INFORMATION 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   81) #define TRANS2_SET_FILE_INFORMATION   0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   82) #define TRANS2_GET_DFS_REFERRAL       0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   83) #define TRANS2_REPORT_DFS_INCOSISTENCY 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   84) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   85) /* SMB Transact (Named Pipe) subcommand codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   86) #define TRANS_SET_NMPIPE_STATE      0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   87) #define TRANS_RAW_READ_NMPIPE       0x0011
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   88) #define TRANS_QUERY_NMPIPE_STATE    0x0021
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   89) #define TRANS_QUERY_NMPIPE_INFO     0x0022
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   90) #define TRANS_PEEK_NMPIPE           0x0023
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   91) #define TRANS_TRANSACT_NMPIPE       0x0026
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   92) #define TRANS_RAW_WRITE_NMPIPE      0x0031
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   93) #define TRANS_READ_NMPIPE           0x0036
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   94) #define TRANS_WRITE_NMPIPE          0x0037
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   95) #define TRANS_WAIT_NMPIPE           0x0053
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   96) #define TRANS_CALL_NMPIPE           0x0054
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   97) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   98) /* NT Transact subcommand codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   99) #define NT_TRANSACT_CREATE            0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  100) #define NT_TRANSACT_IOCTL             0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  101) #define NT_TRANSACT_SET_SECURITY_DESC 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  102) #define NT_TRANSACT_NOTIFY_CHANGE     0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  103) #define NT_TRANSACT_RENAME            0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  104) #define NT_TRANSACT_QUERY_SECURITY_DESC 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  105) #define NT_TRANSACT_GET_USER_QUOTA    0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  106) #define NT_TRANSACT_SET_USER_QUOTA    0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  108) #define MAX_CIFS_SMALL_BUFFER_SIZE 448 /* big enough for most */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  109) /* future chained NTCreateXReadX bigger, but for time being NTCreateX biggest */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  110) /* among the requests (NTCreateX response is bigger with wct of 34) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  111) #define MAX_CIFS_HDR_SIZE 0x58 /* 4 len + 32 hdr + (2*24 wct) + 2 bct + 2 pad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  112) #define CIFS_SMALL_PATH 120 /* allows for (448-88)/3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  114) /* internal cifs vfs structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  115) /*****************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  116)  * All constants go here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  117)  *****************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  118)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  119) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  120) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  121)  * Starting value for maximum SMB size negotiation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  122)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  123) #define CIFS_MAX_MSGSIZE (4*4096)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  125) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  126)  * Size of encrypted user password in bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  127)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  128) #define CIFS_ENCPWD_SIZE (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  130) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  131)  * Size of the crypto key returned on the negotiate SMB in bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  132)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  133) #define CIFS_CRYPTO_KEY_SIZE (8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  135) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  136)  * Size of the ntlm client response
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  137)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  138) #define CIFS_AUTH_RESP_SIZE (24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  140) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  141)  * Size of the session key (crypto key encrypted with the password
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  142)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  143) #define CIFS_SESS_KEY_SIZE (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  145) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  146)  * Size of the smb3 signing key
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  147)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  148) #define SMB3_SIGN_KEY_SIZE (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  150) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  151)  * Size of the smb3 encryption/decryption keys
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  152)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  153) #define SMB3_ENC_DEC_KEY_SIZE (32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  155) #define CIFS_CLIENT_CHALLENGE_SIZE (8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  156) #define CIFS_SERVER_CHALLENGE_SIZE (8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  157) #define CIFS_HMAC_MD5_HASH_SIZE (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  158) #define CIFS_CPHTXT_SIZE (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  159) #define CIFS_NTHASH_SIZE (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  161) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  162)  * Maximum user name length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  163)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  164) #define CIFS_UNLEN (20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  166) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  167)  * Flags on SMB open
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  168)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  169) #define SMBOPEN_WRITE_THROUGH 0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  170) #define SMBOPEN_DENY_ALL      0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  171) #define SMBOPEN_DENY_WRITE    0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  172) #define SMBOPEN_DENY_READ     0x0030
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  173) #define SMBOPEN_DENY_NONE     0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  174) #define SMBOPEN_READ          0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  175) #define SMBOPEN_WRITE         0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  176) #define SMBOPEN_READWRITE     0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  177) #define SMBOPEN_EXECUTE       0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  179) #define SMBOPEN_OCREATE       0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  180) #define SMBOPEN_OTRUNC        0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  181) #define SMBOPEN_OAPPEND       0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  183) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  184)  * SMB flag definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  185)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  186) #define SMBFLG_EXTD_LOCK 0x01	/* server supports lock-read write-unlock smb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  187) #define SMBFLG_RCV_POSTED 0x02	/* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  188) #define SMBFLG_RSVD 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  189) #define SMBFLG_CASELESS 0x08	/* all pathnames treated as caseless (off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  190) 				implies case sensitive file handling request) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  191) #define SMBFLG_CANONICAL_PATH_FORMAT 0x10	/* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  192) #define SMBFLG_OLD_OPLOCK 0x20	/* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  193) #define SMBFLG_OLD_OPLOCK_NOTIFY 0x40	/* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  194) #define SMBFLG_RESPONSE 0x80	/* this PDU is a response from server */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  196) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  197)  * SMB flag2 definitions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  198)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  199) #define SMBFLG2_KNOWS_LONG_NAMES cpu_to_le16(1)	/* can send long (non-8.3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  200) 						   path names in response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  201) #define SMBFLG2_KNOWS_EAS cpu_to_le16(2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  202) #define SMBFLG2_SECURITY_SIGNATURE cpu_to_le16(4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  203) #define SMBFLG2_COMPRESSED (8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  204) #define SMBFLG2_SECURITY_SIGNATURE_REQUIRED (0x10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  205) #define SMBFLG2_IS_LONG_NAME cpu_to_le16(0x40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  206) #define SMBFLG2_REPARSE_PATH (0x400)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  207) #define SMBFLG2_EXT_SEC cpu_to_le16(0x800)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  208) #define SMBFLG2_DFS cpu_to_le16(0x1000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  209) #define SMBFLG2_PAGING_IO cpu_to_le16(0x2000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  210) #define SMBFLG2_ERR_STATUS cpu_to_le16(0x4000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  211) #define SMBFLG2_UNICODE cpu_to_le16(0x8000)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  213) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  214)  * These are the file access permission bits defined in CIFS for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  215)  * NTCreateAndX as well as the level 0x107
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  216)  * TRANS2_QUERY_PATH_INFORMATION API.  The level 0x107, SMB_QUERY_FILE_ALL_INFO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  217)  * responds with the AccessFlags.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  218)  * The AccessFlags specifies the access permissions a caller has to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  219)  * file and can have any suitable combination of the following values:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  220)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  222) #define FILE_READ_DATA        0x00000001  /* Data can be read from the file   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  223) #define FILE_WRITE_DATA       0x00000002  /* Data can be written to the file  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  224) #define FILE_APPEND_DATA      0x00000004  /* Data can be appended to the file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  225) #define FILE_READ_EA          0x00000008  /* Extended attributes associated   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  226) 					  /* with the file can be read        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  227) #define FILE_WRITE_EA         0x00000010  /* Extended attributes associated   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  228) 					  /* with the file can be written     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  229) #define FILE_EXECUTE          0x00000020  /*Data can be read into memory from */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  230) 					  /* the file using system paging I/O */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  231) #define FILE_DELETE_CHILD     0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  232) #define FILE_READ_ATTRIBUTES  0x00000080  /* Attributes associated with the   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  233) 					  /* file can be read                 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  234) #define FILE_WRITE_ATTRIBUTES 0x00000100  /* Attributes associated with the   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  235) 					  /* file can be written              */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  236) #define DELETE                0x00010000  /* The file can be deleted          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  237) #define READ_CONTROL          0x00020000  /* The access control list and      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  238) 					  /* ownership associated with the    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  239) 					  /* file can be read                 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  240) #define WRITE_DAC             0x00040000  /* The access control list and      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  241) 					  /* ownership associated with the    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  242) 					  /* file can be written.             */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  243) #define WRITE_OWNER           0x00080000  /* Ownership information associated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  244) 					  /* with the file can be written     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  245) #define SYNCHRONIZE           0x00100000  /* The file handle can waited on to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  246) 					  /* synchronize with the completion  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  247) 					  /* of an input/output request       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  248) #define GENERIC_ALL           0x10000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  249) #define GENERIC_EXECUTE       0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  250) #define GENERIC_WRITE         0x40000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  251) #define GENERIC_READ          0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  252) 					 /* In summary - Relevant file       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  253) 					 /* access flags from CIFS are       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  254) 					 /* file_read_data, file_write_data  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  255) 					 /* file_execute, file_read_attributes*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  256) 					 /* write_dac, and delete.           */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  258) #define FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_READ_ATTRIBUTES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  259) #define FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  260) 				| FILE_WRITE_EA | FILE_WRITE_ATTRIBUTES)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  261) #define FILE_EXEC_RIGHTS (FILE_EXECUTE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  262) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  263) #define SET_FILE_READ_RIGHTS (FILE_READ_DATA | FILE_READ_EA | FILE_WRITE_EA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  264) 				| FILE_READ_ATTRIBUTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  265) 				| FILE_WRITE_ATTRIBUTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  266) 				| DELETE | READ_CONTROL | WRITE_DAC \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  267) 				| WRITE_OWNER | SYNCHRONIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  268) #define SET_FILE_WRITE_RIGHTS (FILE_WRITE_DATA | FILE_APPEND_DATA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  269) 				| FILE_READ_EA | FILE_WRITE_EA \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  270) 				| FILE_DELETE_CHILD | FILE_READ_ATTRIBUTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  271) 				| FILE_WRITE_ATTRIBUTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  272) 				| DELETE | READ_CONTROL | WRITE_DAC \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  273) 				| WRITE_OWNER | SYNCHRONIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  274) #define SET_FILE_EXEC_RIGHTS (FILE_READ_EA | FILE_WRITE_EA | FILE_EXECUTE \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  275) 				| FILE_READ_ATTRIBUTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  276) 				| FILE_WRITE_ATTRIBUTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  277) 				| DELETE | READ_CONTROL | WRITE_DAC \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  278) 				| WRITE_OWNER | SYNCHRONIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  279) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  280) #define SET_MINIMUM_RIGHTS (FILE_READ_EA | FILE_READ_ATTRIBUTES \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  281) 				| READ_CONTROL | SYNCHRONIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  284) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  285)  * Invalid readdir handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  286)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  287) #define CIFS_NO_HANDLE        0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  288) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  289) #define NO_CHANGE_64          0xFFFFFFFFFFFFFFFFULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  290) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  291) /* IPC$ in ASCII */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  292) #define CIFS_IPC_RESOURCE "\x49\x50\x43\x24"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  293) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  294) /* IPC$ in Unicode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  295) #define CIFS_IPC_UNICODE_RESOURCE "\x00\x49\x00\x50\x00\x43\x00\x24\x00\x00"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  296) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  297) /* Unicode Null terminate 2 bytes of 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  298) #define UNICODE_NULL "\x00\x00"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  299) #define ASCII_NULL 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  300) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  301) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  302)  * Server type values (returned on EnumServer API
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  303)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  304) #define CIFS_SV_TYPE_DC     0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  305) #define CIFS_SV_TYPE_BACKDC 0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  307) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  308)  * Alias type flags (From EnumAlias API call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  309)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  310) #define CIFS_ALIAS_TYPE_FILE 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  311) #define CIFS_SHARE_TYPE_FILE 0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  313) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  314)  * File Attribute flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  315)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  316) #define ATTR_READONLY  0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  317) #define ATTR_HIDDEN    0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  318) #define ATTR_SYSTEM    0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  319) #define ATTR_VOLUME    0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  320) #define ATTR_DIRECTORY 0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  321) #define ATTR_ARCHIVE   0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  322) #define ATTR_DEVICE    0x0040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  323) #define ATTR_NORMAL    0x0080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  324) #define ATTR_TEMPORARY 0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  325) #define ATTR_SPARSE    0x0200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  326) #define ATTR_REPARSE   0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  327) #define ATTR_COMPRESSED 0x0800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  328) #define ATTR_OFFLINE    0x1000	/* ie file not immediately available -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  329) 					on offline storage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  330) #define ATTR_NOT_CONTENT_INDEXED 0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  331) #define ATTR_ENCRYPTED  0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  332) #define ATTR_POSIX_SEMANTICS 0x01000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  333) #define ATTR_BACKUP_SEMANTICS 0x02000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  334) #define ATTR_DELETE_ON_CLOSE 0x04000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  335) #define ATTR_SEQUENTIAL_SCAN 0x08000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  336) #define ATTR_RANDOM_ACCESS   0x10000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  337) #define ATTR_NO_BUFFERING    0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  338) #define ATTR_WRITE_THROUGH   0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  339) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  340) /* ShareAccess flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  341) #define FILE_NO_SHARE     0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  342) #define FILE_SHARE_READ   0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  343) #define FILE_SHARE_WRITE  0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  344) #define FILE_SHARE_DELETE 0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  345) #define FILE_SHARE_ALL    0x00000007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  346) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  347) /* CreateDisposition flags, similar to CreateAction as well */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  348) #define FILE_SUPERSEDE    0x00000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  349) #define FILE_OPEN         0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  350) #define FILE_CREATE       0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  351) #define FILE_OPEN_IF      0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  352) #define FILE_OVERWRITE    0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  353) #define FILE_OVERWRITE_IF 0x00000005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  354) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  355) /* CreateOptions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  356) #define CREATE_NOT_FILE		0x00000001	/* if set must not be file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  357) #define CREATE_WRITE_THROUGH	0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  358) #define CREATE_SEQUENTIAL       0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  359) #define CREATE_NO_BUFFER        0x00000008      /* should not buffer on srv */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  360) #define CREATE_SYNC_ALERT       0x00000010	/* MBZ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  361) #define CREATE_ASYNC_ALERT      0x00000020	/* MBZ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  362) #define CREATE_NOT_DIR		0x00000040    /* if set must not be directory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  363) #define CREATE_TREE_CONNECTION  0x00000080	/* should be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  364) #define CREATE_COMPLETE_IF_OPLK 0x00000100	/* should be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  365) #define CREATE_NO_EA_KNOWLEDGE  0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  366) #define CREATE_EIGHT_DOT_THREE  0x00000400	/* doc says this is obsolete
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  367) 						 "open for recovery" flag should
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  368) 						 be zero in any case */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  369) #define CREATE_OPEN_FOR_RECOVERY 0x00000400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  370) #define CREATE_RANDOM_ACCESS	0x00000800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  371) #define CREATE_DELETE_ON_CLOSE	0x00001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  372) #define CREATE_OPEN_BY_ID       0x00002000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  373) #define CREATE_OPEN_BACKUP_INTENT 0x00004000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  374) #define CREATE_NO_COMPRESSION   0x00008000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  375) #define CREATE_RESERVE_OPFILTER 0x00100000	/* should be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  376) #define OPEN_REPARSE_POINT	0x00200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  377) #define OPEN_NO_RECALL          0x00400000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  378) #define OPEN_FREE_SPACE_QUERY   0x00800000	/* should be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  379) #define CREATE_OPTIONS_MASK     0x007FFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  380) #define CREATE_OPTION_READONLY	0x10000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  381) #define CREATE_OPTION_SPECIAL   0x20000000   /* system. NB not sent over wire */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  383) /* ImpersonationLevel flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  384) #define SECURITY_ANONYMOUS      0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  385) #define SECURITY_IDENTIFICATION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  386) #define SECURITY_IMPERSONATION  2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  387) #define SECURITY_DELEGATION     3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  388) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  389) /* SecurityFlags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  390) #define SECURITY_CONTEXT_TRACKING 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  391) #define SECURITY_EFFECTIVE_ONLY   0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  392) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  393) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  394)  * Default PID value, used in all SMBs where the PID is not important
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  395)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  396) #define CIFS_DFT_PID  0x1234
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  397) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  398) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  399)  * We use the same routine for Copy and Move SMBs.  This flag is used to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  400)  * distinguish
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  401)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  402) #define CIFS_COPY_OP 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  403) #define CIFS_RENAME_OP 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  404) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  405) #define GETU16(var)  (*((__u16 *)var))	/* BB check for endian issues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  406) #define GETU32(var)  (*((__u32 *)var))	/* BB check for endian issues */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  407) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  408) struct smb_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  409) 	__be32 smb_buf_length;	/* BB length is only two (rarely three) bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  410) 		with one or two byte "type" preceding it that will be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  411) 		zero - we could mask the type byte off */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  412) 	__u8 Protocol[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  413) 	__u8 Command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  414) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  415) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  416) 			__u8 ErrorClass;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  417) 			__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  418) 			__le16 Error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  419) 		} __attribute__((packed)) DosError;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  420) 		__le32 CifsError;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  421) 	} __attribute__((packed)) Status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  422) 	__u8 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  423) 	__le16 Flags2;		/* note: le */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  424) 	__le16 PidHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  425) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  426) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  427) 			__le32 SequenceNumber;  /* le */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  428) 			__u32 Reserved; /* zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  429) 		} __attribute__((packed)) Sequence;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  430) 		__u8 SecuritySignature[8];	/* le */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  431) 	} __attribute__((packed)) Signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  432) 	__u8 pad[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  433) 	__u16 Tid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  434) 	__le16 Pid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  435) 	__u16 Uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  436) 	__le16 Mid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  437) 	__u8 WordCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  438) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  439) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  440) /* given a pointer to an smb_hdr, retrieve a void pointer to the ByteCount */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  441) static inline void *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  442) BCC(struct smb_hdr *smb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  443) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  444) 	return (void *)smb + sizeof(*smb) + 2 * smb->WordCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  445) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  446) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  447) /* given a pointer to an smb_hdr retrieve the pointer to the byte area */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  448) #define pByteArea(smb_var) (BCC(smb_var) + 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  449) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  450) /* get the unconverted ByteCount for a SMB packet and return it */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  451) static inline __u16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  452) get_bcc(struct smb_hdr *hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  453) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  454) 	__le16 *bc_ptr = (__le16 *)BCC(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  455) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  456) 	return get_unaligned_le16(bc_ptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  457) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  458) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  459) /* set the ByteCount for a SMB packet in little-endian */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  460) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  461) put_bcc(__u16 count, struct smb_hdr *hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  462) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  463) 	__le16 *bc_ptr = (__le16 *)BCC(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  464) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  465) 	put_unaligned_le16(count, bc_ptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  466) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  467) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  468) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  469)  * Computer Name Length (since Netbios name was length 16 with last byte 0x20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  470)  * No longer as important, now that TCP names are more commonly used to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  471)  * resolve hosts.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  472)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  473) #define CNLEN 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  474) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  475) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  476)  * Share Name Length (SNLEN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  477)  * Note:  This length was limited by the SMB used to get
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  478)  *        the Share info.   NetShareEnum only returned 13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  479)  *        chars, including the null termination.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  480)  * This was removed because it no longer is limiting.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  481)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  483) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  484)  * Comment Length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  485)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  486) #define MAXCOMMENTLEN 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  487) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  488) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  489)  * The OS/2 maximum path name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  490)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  491) #define MAX_PATHCONF 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  493) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  494)  *  SMB frame definitions  (following must be packed structs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  495)  *  See the SNIA CIFS Specification for details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  496)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  497)  *  The Naming convention is the lower case version of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  498)  *  smb command code name for the struct and this is typedef to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  499)  *  uppercase version of the same name with the prefix SMB_ removed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  500)  *  for brevity.  Although typedefs are not commonly used for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  501)  *  structure definitions in the Linux kernel, their use in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  502)  *  CIFS standards document, which this code is based on, may
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  503)  *  make this one of the cases where typedefs for structures make
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  504)  *  sense to improve readability for readers of the standards doc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  505)  *  Typedefs can always be removed later if they are too distracting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  506)  *  and they are only used for the CIFSs PDUs themselves, not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  507)  *  internal cifs vfs structures
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  508)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  509)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  510) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  511) typedef struct negotiate_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  512) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  513) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  514) 	unsigned char DialectsArray[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  515) } __attribute__((packed)) NEGOTIATE_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  516) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  517) /* Dialect index is 13 for LANMAN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  518) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  519) #define MIN_TZ_ADJ (15 * 60) /* minimum grid for timezones in seconds */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  520) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  521) typedef struct lanman_neg_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  522) 	struct smb_hdr hdr;	/* wct = 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  523) 	__le16 DialectIndex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  524) 	__le16 SecurityMode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  525) 	__le16 MaxBufSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  526) 	__le16 MaxMpxCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  527) 	__le16 MaxNumberVcs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  528) 	__le16 RawMode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  529) 	__le32 SessionKey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  530) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  531) 		__le16 Time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  532) 		__le16 Date;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  533) 	} __attribute__((packed)) SrvTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  534) 	__le16 ServerTimeZone;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  535) 	__le16 EncryptionKeyLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  536) 	__le16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  537) 	__u16  ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  538) 	unsigned char EncryptionKey[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  539) } __attribute__((packed)) LANMAN_NEG_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  540) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  541) #define READ_RAW_ENABLE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  542) #define WRITE_RAW_ENABLE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  543) #define RAW_ENABLE (READ_RAW_ENABLE | WRITE_RAW_ENABLE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  544) #define SMB1_CLIENT_GUID_SIZE (16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  545) typedef struct negotiate_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  546) 	struct smb_hdr hdr;	/* wct = 17 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  547) 	__le16 DialectIndex; /* 0xFFFF = no dialect acceptable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  548) 	__u8 SecurityMode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  549) 	__le16 MaxMpxCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  550) 	__le16 MaxNumberVcs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  551) 	__le32 MaxBufferSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  552) 	__le32 MaxRawSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  553) 	__le32 SessionKey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  554) 	__le32 Capabilities;	/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  555) 	__le32 SystemTimeLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  556) 	__le32 SystemTimeHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  557) 	__le16 ServerTimeZone;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  558) 	__u8 EncryptionKeyLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  559) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  560) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  561) 		unsigned char EncryptionKey[1];	/* cap extended security off */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  562) 		/* followed by Domain name - if extended security is off */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  563) 		/* followed by 16 bytes of server GUID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  564) 		/* then security blob if cap_extended_security negotiated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  565) 		struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  566) 			unsigned char GUID[SMB1_CLIENT_GUID_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  567) 			unsigned char SecurityBlob[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  568) 		} __attribute__((packed)) extended_response;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  569) 	} __attribute__((packed)) u;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  570) } __attribute__((packed)) NEGOTIATE_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  571) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  572) /* SecurityMode bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  573) #define SECMODE_USER          0x01	/* off indicates share level security */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  574) #define SECMODE_PW_ENCRYPT    0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  575) #define SECMODE_SIGN_ENABLED  0x04	/* SMB security signatures enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  576) #define SECMODE_SIGN_REQUIRED 0x08	/* SMB security signatures required */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  577) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  578) /* Negotiate response Capabilities */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  579) #define CAP_RAW_MODE           0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  580) #define CAP_MPX_MODE           0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  581) #define CAP_UNICODE            0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  582) #define CAP_LARGE_FILES        0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  583) #define CAP_NT_SMBS            0x00000010	/* implies CAP_NT_FIND */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  584) #define CAP_RPC_REMOTE_APIS    0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  585) #define CAP_STATUS32           0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  586) #define CAP_LEVEL_II_OPLOCKS   0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  587) #define CAP_LOCK_AND_READ      0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  588) #define CAP_NT_FIND            0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  589) #define CAP_DFS                0x00001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  590) #define CAP_INFOLEVEL_PASSTHRU 0x00002000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  591) #define CAP_LARGE_READ_X       0x00004000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  592) #define CAP_LARGE_WRITE_X      0x00008000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  593) #define CAP_LWIO               0x00010000 /* support fctl_srv_req_resume_key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  594) #define CAP_UNIX               0x00800000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  595) #define CAP_COMPRESSED_DATA    0x02000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  596) #define CAP_DYNAMIC_REAUTH     0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  597) #define CAP_PERSISTENT_HANDLES 0x40000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  598) #define CAP_EXTENDED_SECURITY  0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  599) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  600) typedef union smb_com_session_setup_andx {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  601) 	struct {		/* request format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  602) 		struct smb_hdr hdr;	/* wct = 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  603) 		__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  604) 		__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  605) 		__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  606) 		__le16 MaxBufferSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  607) 		__le16 MaxMpxCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  608) 		__le16 VcNumber;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  609) 		__u32 SessionKey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  610) 		__le16 SecurityBlobLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  611) 		__u32 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  612) 		__le32 Capabilities;	/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  613) 		__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  614) 		unsigned char SecurityBlob[1];	/* followed by */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  615) 		/* STRING NativeOS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  616) 		/* STRING NativeLanMan */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  617) 	} __attribute__((packed)) req;	/* NTLM request format (with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  618) 					extended security */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  619) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  620) 	struct {		/* request format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  621) 		struct smb_hdr hdr;	/* wct = 13 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  622) 		__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  623) 		__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  624) 		__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  625) 		__le16 MaxBufferSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  626) 		__le16 MaxMpxCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  627) 		__le16 VcNumber;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  628) 		__u32 SessionKey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  629) 		__le16 CaseInsensitivePasswordLength; /* ASCII password len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  630) 		__le16 CaseSensitivePasswordLength; /* Unicode password length*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  631) 		__u32 Reserved;	/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  632) 		__le32 Capabilities;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  633) 		__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  634) 		unsigned char CaseInsensitivePassword[1];     /* followed by: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  635) 		/* unsigned char * CaseSensitivePassword; */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  636) 		/* STRING AccountName */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  637) 		/* STRING PrimaryDomain */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  638) 		/* STRING NativeOS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  639) 		/* STRING NativeLanMan */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  640) 	} __attribute__((packed)) req_no_secext; /* NTLM request format (without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  641) 							extended security */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  642) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  643) 	struct {		/* default (NTLM) response format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  644) 		struct smb_hdr hdr;	/* wct = 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  645) 		__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  646) 		__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  647) 		__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  648) 		__le16 Action;	/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  649) 		__le16 SecurityBlobLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  650) 		__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  651) 		unsigned char SecurityBlob[1];	/* followed by */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  652) /*      unsigned char  * NativeOS;      */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  653) /*	unsigned char  * NativeLanMan;  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  654) /*      unsigned char  * PrimaryDomain; */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  655) 	} __attribute__((packed)) resp;	/* NTLM response
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  656) 					   (with or without extended sec) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  657) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  658) 	struct {		/* request format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  659) 		struct smb_hdr hdr;	/* wct = 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  660) 		__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  661) 		__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  662) 		__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  663) 		__le16 MaxBufferSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  664) 		__le16 MaxMpxCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  665) 		__le16 VcNumber;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  666) 		__u32 SessionKey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  667) 		__le16 PasswordLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  668) 		__u32 Reserved; /* encrypt key len and offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  669) 		__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  670) 		unsigned char AccountPassword[1];	/* followed by */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  671) 		/* STRING AccountName */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  672) 		/* STRING PrimaryDomain */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  673) 		/* STRING NativeOS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  674) 		/* STRING NativeLanMan */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  675) 	} __attribute__((packed)) old_req; /* pre-NTLM (LANMAN2.1) req format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  676) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  677) 	struct {		/* default (NTLM) response format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  678) 		struct smb_hdr hdr;	/* wct = 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  679) 		__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  680) 		__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  681) 		__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  682) 		__le16 Action;	/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  683) 		__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  684) 		unsigned char NativeOS[1];	/* followed by */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  685) /*	unsigned char * NativeLanMan; */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  686) /*      unsigned char * PrimaryDomain; */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  687) 	} __attribute__((packed)) old_resp; /* pre-NTLM (LANMAN2.1) response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  688) } __attribute__((packed)) SESSION_SETUP_ANDX;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  689) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  690) /* format of NLTMv2 Response ie "case sensitive password" hash when NTLMv2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  691) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  692) #define NTLMSSP_SERVER_TYPE	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  693) #define NTLMSSP_DOMAIN_TYPE	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  694) #define NTLMSSP_FQ_DOMAIN_TYPE	3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  695) #define NTLMSSP_DNS_DOMAIN_TYPE	4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  696) #define NTLMSSP_DNS_PARENT_TYPE	5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  697) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  698) struct ntlmssp2_name {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  699) 	__le16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  700) 	__le16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  701) /*	char   name[length]; */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  702) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  703) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  704) struct ntlmv2_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  705) 	union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  706) 	    char ntlmv2_hash[CIFS_ENCPWD_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  707) 	    struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  708) 		__u8 reserved[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  709) 		__u8 key[CIFS_SERVER_CHALLENGE_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  710) 	    } __attribute__((packed)) challenge;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  711) 	} __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  712) 	__le32 blob_signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  713) 	__u32  reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  714) 	__le64  time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  715) 	__u64  client_chal; /* random */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  716) 	__u32  reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  717) 	/* array of name entries could follow ending in minimum 4 byte struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  718) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  719) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  720) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  721) #define CIFS_NETWORK_OPSYS "CIFS VFS Client for Linux"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  722) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  723) /* Capabilities bits (for NTLM SessSetup request) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  724) #define CAP_UNICODE            0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  725) #define CAP_LARGE_FILES        0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  726) #define CAP_NT_SMBS            0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  727) #define CAP_STATUS32           0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  728) #define CAP_LEVEL_II_OPLOCKS   0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  729) #define CAP_NT_FIND            0x00000200	/* reserved should be zero
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  730) 				(because NT_SMBs implies the same thing?) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  731) #define CAP_BULK_TRANSFER      0x20000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  732) #define CAP_EXTENDED_SECURITY  0x80000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  733) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  734) /* Action bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  735) #define GUEST_LOGIN 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  736) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  737) typedef struct smb_com_tconx_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  738) 	struct smb_hdr hdr;	/* wct = 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  739) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  740) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  741) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  742) 	__le16 Flags;		/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  743) 	__le16 PasswordLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  744) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  745) 	unsigned char Password[1];	/* followed by */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  746) /* STRING Path    *//* \\server\share name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  747) 	/* STRING Service */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  748) } __attribute__((packed)) TCONX_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  749) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  750) typedef struct smb_com_tconx_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  751) 	struct smb_hdr hdr;	/* wct = 3 , not extended response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  752) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  753) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  754) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  755) 	__le16 OptionalSupport;	/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  756) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  757) 	unsigned char Service[1];	/* always ASCII, not Unicode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  758) 	/* STRING NativeFileSystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  759) } __attribute__((packed)) TCONX_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  760) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  761) typedef struct smb_com_tconx_rsp_ext {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  762) 	struct smb_hdr hdr;	/* wct = 7, extended response */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  763) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  764) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  765) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  766) 	__le16 OptionalSupport;	/* see below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  767) 	__le32 MaximalShareAccessRights;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  768) 	__le32 GuestMaximalShareAccessRights;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  769) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  770) 	unsigned char Service[1];	/* always ASCII, not Unicode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  771) 	/* STRING NativeFileSystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  772) } __attribute__((packed)) TCONX_RSP_EXT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  773) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  774) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  775) /* tree connect Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  776) #define DISCONNECT_TID          0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  777) #define TCON_EXTENDED_SIGNATURES 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  778) #define TCON_EXTENDED_SECINFO   0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  779) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  780) /* OptionalSupport bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  781) #define SMB_SUPPORT_SEARCH_BITS 0x0001	/* "must have" directory search bits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  782) 					 (exclusive searches supported) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  783) #define SMB_SHARE_IS_IN_DFS     0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  784) #define SMB_CSC_MASK               0x000C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  785) /* CSC flags defined as follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  786) #define SMB_CSC_CACHE_MANUAL_REINT 0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  787) #define SMB_CSC_CACHE_AUTO_REINT   0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  788) #define SMB_CSC_CACHE_VDO          0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  789) #define SMB_CSC_NO_CACHING         0x000C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  790) #define SMB_UNIQUE_FILE_NAME    0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  791) #define SMB_EXTENDED_SIGNATURES 0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  792) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  793) /* services
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  794)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  795)  * A:       ie disk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  796)  * LPT1:    ie printer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  797)  * IPC      ie named pipe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  798)  * COMM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  799)  * ?????    ie any type
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  800)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  801)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  802) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  803) typedef struct smb_com_echo_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  804) 	struct	smb_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  805) 	__le16	EchoCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  806) 	__le16	ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  807) 	char	Data[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  808) } __attribute__((packed)) ECHO_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  809) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  810) typedef struct smb_com_echo_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  811) 	struct	smb_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  812) 	__le16	SequenceNumber;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  813) 	__le16	ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  814) 	char	Data[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  815) } __attribute__((packed)) ECHO_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  816) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  817) typedef struct smb_com_logoff_andx_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  818) 	struct smb_hdr hdr;	/* wct = 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  819) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  820) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  821) 	__u16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  822) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  823) } __attribute__((packed)) LOGOFF_ANDX_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  824) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  825) typedef struct smb_com_logoff_andx_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  826) 	struct smb_hdr hdr;	/* wct = 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  827) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  828) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  829) 	__u16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  830) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  831) } __attribute__((packed)) LOGOFF_ANDX_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  832) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  833) typedef union smb_com_tree_disconnect {	/* as an altetnative can use flag on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  834) 					tree_connect PDU to effect disconnect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  835) 					/* tdis is probably simplest SMB PDU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  836) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  837) 		struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  838) 		__u16 ByteCount;	/* bcc = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  839) 	} __attribute__((packed)) req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  840) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  841) 		struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  842) 		__u16 ByteCount;	/* bcc = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  843) 	} __attribute__((packed)) resp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  844) } __attribute__((packed)) TREE_DISCONNECT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  845) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  846) typedef struct smb_com_close_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  847) 	struct smb_hdr hdr;	/* wct = 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  848) 	__u16 FileID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  849) 	__u32 LastWriteTime;	/* should be zero or -1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  850) 	__u16 ByteCount;	/* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  851) } __attribute__((packed)) CLOSE_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  852) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  853) typedef struct smb_com_close_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  854) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  855) 	__u16 ByteCount;	/* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  856) } __attribute__((packed)) CLOSE_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  857) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  858) typedef struct smb_com_flush_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  859) 	struct smb_hdr hdr;	/* wct = 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  860) 	__u16 FileID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  861) 	__u16 ByteCount;	/* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  862) } __attribute__((packed)) FLUSH_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  863) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  864) typedef struct smb_com_findclose_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  865) 	struct smb_hdr hdr; /* wct = 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  866) 	__u16 FileID;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  867) 	__u16 ByteCount;    /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  868) } __attribute__((packed)) FINDCLOSE_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  869) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  870) /* OpenFlags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  871) #define REQ_MORE_INFO      0x00000001  /* legacy (OPEN_AND_X) only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  872) #define REQ_OPLOCK         0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  873) #define REQ_BATCHOPLOCK    0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  874) #define REQ_OPENDIRONLY    0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  875) #define REQ_EXTENDED_INFO  0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  876) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  877) /* File type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  878) #define DISK_TYPE		0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  879) #define BYTE_PIPE_TYPE		0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  880) #define MESSAGE_PIPE_TYPE	0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  881) #define PRINTER_TYPE		0x0003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  882) #define COMM_DEV_TYPE		0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  883) #define UNKNOWN_TYPE		0xFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  884) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  885) /* Device Type or File Status Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  886) #define NO_EAS			0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  887) #define NO_SUBSTREAMS		0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  888) #define NO_REPARSETAG		0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  889) /* following flags can apply if pipe */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  890) #define ICOUNT_MASK		0x00FF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  891) #define PIPE_READ_MODE		0x0100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  892) #define NAMED_PIPE_TYPE		0x0400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  893) #define PIPE_END_POINT		0x4000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  894) #define BLOCKING_NAMED_PIPE	0x8000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  895) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  896) typedef struct smb_com_open_req {	/* also handles create */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  897) 	struct smb_hdr hdr;	/* wct = 24 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  898) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  899) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  900) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  901) 	__u8 Reserved;		/* Must Be Zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  902) 	__le16 NameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  903) 	__le32 OpenFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  904) 	__u32  RootDirectoryFid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  905) 	__le32 DesiredAccess;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  906) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  907) 	__le32 FileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  908) 	__le32 ShareAccess;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  909) 	__le32 CreateDisposition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  910) 	__le32 CreateOptions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  911) 	__le32 ImpersonationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  912) 	__u8 SecurityFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  913) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  914) 	char fileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  915) } __attribute__((packed)) OPEN_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  916) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  917) /* open response: oplock levels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  918) #define OPLOCK_NONE  	 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  919) #define OPLOCK_EXCLUSIVE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  920) #define OPLOCK_BATCH	 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  921) #define OPLOCK_READ	 3  /* level 2 oplock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  922) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  923) /* open response for CreateAction shifted left */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  924) #define CIFS_CREATE_ACTION 0x20000 /* file created */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  925) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  926) typedef struct smb_com_open_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  927) 	struct smb_hdr hdr;	/* wct = 34 BB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  928) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  929) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  930) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  931) 	__u8 OplockLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  932) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  933) 	__le32 CreateAction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  934) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  935) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  936) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  937) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  938) 	__le32 FileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  939) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  940) 	__le64 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  941) 	__le16 FileType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  942) 	__le16 DeviceState;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  943) 	__u8 DirectoryFlag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  944) 	__u16 ByteCount;	/* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  945) } __attribute__((packed)) OPEN_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  946) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  947) typedef struct smb_com_open_rsp_ext {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  948) 	struct smb_hdr hdr;     /* wct = 42 but meaningless due to MS bug? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  949) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  950) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  951) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  952) 	__u8 OplockLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  953) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  954) 	__le32 CreateAction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  955) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  956) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  957) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  958) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  959) 	__le32 FileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  960) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  961) 	__le64 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  962) 	__le16 FileType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  963) 	__le16 DeviceState;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  964) 	__u8 DirectoryFlag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  965) 	__u8 VolumeGUID[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  966) 	__u64 FileId; /* note no endian conversion - is opaque UniqueID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  967) 	__le32 MaximalAccessRights;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  968) 	__le32 GuestMaximalAccessRights;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  969) 	__u16 ByteCount;        /* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  970) } __attribute__((packed)) OPEN_RSP_EXT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  971) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  972) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  973) /* format of legacy open request */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  974) typedef struct smb_com_openx_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  975) 	struct smb_hdr	hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  976) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  977) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  978) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  979) 	__le16 OpenFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  980) 	__le16 Mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  981) 	__le16 Sattr; /* search attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  982) 	__le16 FileAttributes;  /* dos attrs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  983) 	__le32 CreateTime; /* os2 format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  984) 	__le16 OpenFunction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  985) 	__le32 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  986) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  987) 	__le32 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  988) 	__le16  ByteCount;  /* file name follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  989) 	char   fileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  990) } __attribute__((packed)) OPENX_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  991) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  992) typedef struct smb_com_openx_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  993) 	struct smb_hdr	hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  994) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  995) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  996) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  997) 	__u16  Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  998) 	__le16 FileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  999) 	__le32 LastWriteTime; /* os2 format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) 	__le32 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) 	__le16 Access;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) 	__le16 FileType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) 	__le16 IPCState;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) 	__le16 Action;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) 	__u32  FileId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) 	__u16  Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) 	__u16  ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) } __attribute__((packed)) OPENX_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) /* For encoding of POSIX Open Request - see trans2 function 0x209 data struct */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) /* Legacy write request for older servers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) typedef struct smb_com_writex_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) 	struct smb_hdr hdr;     /* wct = 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) 	__le32 OffsetLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) 	__u32 Reserved; /* Timeout */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) 	__le16 WriteMode; /* 1 = write through */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) 	__le16 Remaining;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) 	__le16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) 	__le16 DataLengthLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) 	__u8 Pad;		/* BB check for whether padded to DWORD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) 				   boundary and optimum performance here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) 	char Data[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) } __attribute__((packed)) WRITEX_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) typedef struct smb_com_write_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) 	struct smb_hdr hdr;	/* wct = 14 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) 	__le32 OffsetLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) 	__u32 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) 	__le16 WriteMode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) 	__le16 Remaining;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) 	__le16 DataLengthHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) 	__le16 DataLengthLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) 	__le32 OffsetHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) 	__u8 Pad;		/* BB check for whether padded to DWORD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) 				   boundary and optimum performance here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) 	char Data[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) } __attribute__((packed)) WRITE_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) typedef struct smb_com_write_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) 	struct smb_hdr hdr;	/* wct = 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) 	__le16 Count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) 	__le16 Remaining;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) 	__le16 CountHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) 	__u16  Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) } __attribute__((packed)) WRITE_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) /* legacy read request for older servers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) typedef struct smb_com_readx_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) 	struct smb_hdr hdr;	/* wct = 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) 	__le32 OffsetLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) 	__le16 MaxCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) 	__le16 MinCount;	/* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) 	__le32 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) 	__le16 Remaining;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) } __attribute__((packed)) READX_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) typedef struct smb_com_read_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) 	struct smb_hdr hdr;	/* wct = 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) 	__le32 OffsetLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) 	__le16 MaxCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) 	__le16 MinCount;		/* obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) 	__le32 MaxCountHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) 	__le16 Remaining;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) 	__le32 OffsetHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) } __attribute__((packed)) READ_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) typedef struct smb_com_read_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) 	struct smb_hdr hdr;	/* wct = 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) 	__le16 Remaining;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) 	__le16 DataCompactionMode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) 	__le16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) 	__le16 DataLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) 	__le16 DataLengthHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) 	__u64 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) 	/* read response data immediately follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) } __attribute__((packed)) READ_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) typedef struct locking_andx_range {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) 	__le16 Pid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) 	__le16 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) 	__le32 OffsetHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) 	__le32 OffsetLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) 	__le32 LengthHigh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) 	__le32 LengthLow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) } __attribute__((packed)) LOCKING_ANDX_RANGE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) #define LOCKING_ANDX_SHARED_LOCK     0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) #define LOCKING_ANDX_OPLOCK_RELEASE  0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) #define LOCKING_ANDX_CHANGE_LOCKTYPE 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) #define LOCKING_ANDX_CANCEL_LOCK     0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) #define LOCKING_ANDX_LARGE_FILES     0x10	/* always on for us */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) typedef struct smb_com_lock_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) 	struct smb_hdr hdr;	/* wct = 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) 	__u8 LockType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) 	__u8 OplockLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) 	__le16 NumberOfUnlocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) 	__le16 NumberOfLocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) 	LOCKING_ANDX_RANGE Locks[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) } __attribute__((packed)) LOCK_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) /* lock type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) #define CIFS_RDLCK	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) #define CIFS_WRLCK	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) #define CIFS_UNLCK      2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) typedef struct cifs_posix_lock {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) 	__le16  lock_type;  /* 0 = Read, 1 = Write, 2 = Unlock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) 	__le16  lock_flags; /* 1 = Wait (only valid for setlock) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) 	__le32  pid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) 	__le64	start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) 	__le64	length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) 	/* BB what about additional owner info to identify network client */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) } __attribute__((packed)) CIFS_POSIX_LOCK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) typedef struct smb_com_lock_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) 	struct smb_hdr hdr;	/* wct = 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) 	__u8 AndXCommand;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) 	__u8 AndXReserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) 	__le16 AndXOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) } __attribute__((packed)) LOCK_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) typedef struct smb_com_rename_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) 	struct smb_hdr hdr;	/* wct = 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) 	__le16 SearchAttributes;	/* target file attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) 	__u8 BufferFormat;	/* 4 = ASCII or Unicode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) 	unsigned char OldFileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) 	/* followed by __u8 BufferFormat2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) 	/* followed by NewFileName */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) } __attribute__((packed)) RENAME_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) 	/* copy request flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) #define COPY_MUST_BE_FILE      0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) #define COPY_MUST_BE_DIR       0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) #define COPY_TARGET_MODE_ASCII 0x0004 /* if not set, binary */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) #define COPY_SOURCE_MODE_ASCII 0x0008 /* if not set, binary */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) #define COPY_VERIFY_WRITES     0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) #define COPY_TREE              0x0020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) typedef struct smb_com_copy_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) 	struct smb_hdr hdr;	/* wct = 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) 	__u16 Tid2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) 	__le16 OpenFunction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) 	__u8 BufferFormat;	/* 4 = ASCII or Unicode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) 	unsigned char OldFileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) 	/* followed by __u8 BufferFormat2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) 	/* followed by NewFileName string */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) } __attribute__((packed)) COPY_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) typedef struct smb_com_copy_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) 	struct smb_hdr hdr;     /* wct = 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) 	__le16 CopyCount;    /* number of files copied */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) 	__u16 ByteCount;    /* may be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) 	__u8 BufferFormat;  /* 0x04 - only present if errored file follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) 	unsigned char ErrorFileName[1]; /* only present if error in copy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) } __attribute__((packed)) COPY_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) #define CREATE_HARD_LINK		0x103
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) #define MOVEFILE_COPY_ALLOWED		0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) #define MOVEFILE_REPLACE_EXISTING	0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) typedef struct smb_com_nt_rename_req {	/* A5 - also used for create hardlink */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) 	struct smb_hdr hdr;	/* wct = 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) 	__le16 SearchAttributes;	/* target file attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) 	__le16 Flags;		/* spec says Information Level */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) 	__le32 ClusterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) 	__u8 BufferFormat;	/* 4 = ASCII or Unicode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) 	unsigned char OldFileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) 	/* followed by __u8 BufferFormat2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) 	/* followed by NewFileName */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) } __attribute__((packed)) NT_RENAME_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) typedef struct smb_com_rename_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) 	__u16 ByteCount;	/* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) } __attribute__((packed)) RENAME_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) typedef struct smb_com_delete_file_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) 	struct smb_hdr hdr;	/* wct = 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) 	__le16 SearchAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) 	__u8 BufferFormat;	/* 4 = ASCII */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) 	unsigned char fileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) } __attribute__((packed)) DELETE_FILE_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) typedef struct smb_com_delete_file_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) 	__u16 ByteCount;	/* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) } __attribute__((packed)) DELETE_FILE_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) typedef struct smb_com_delete_directory_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) 	__u8 BufferFormat;	/* 4 = ASCII */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) 	unsigned char DirName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) } __attribute__((packed)) DELETE_DIRECTORY_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) typedef struct smb_com_delete_directory_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) 	__u16 ByteCount;	/* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) } __attribute__((packed)) DELETE_DIRECTORY_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) typedef struct smb_com_create_directory_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) 	__u8 BufferFormat;	/* 4 = ASCII */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) 	unsigned char DirName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) } __attribute__((packed)) CREATE_DIRECTORY_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) typedef struct smb_com_create_directory_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) 	struct smb_hdr hdr;	/* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) 	__u16 ByteCount;	/* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) } __attribute__((packed)) CREATE_DIRECTORY_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) typedef struct smb_com_query_information_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) 	struct smb_hdr hdr;     /* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) 	__le16 ByteCount;	/* 1 + namelen + 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) 	__u8 BufferFormat;      /* 4 = ASCII */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) 	unsigned char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) } __attribute__((packed)) QUERY_INFORMATION_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) typedef struct smb_com_query_information_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) 	struct smb_hdr hdr;     /* wct = 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) 	__le16 attr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) 	__le32  last_write_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) 	__le32 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) 	__u16  reserved[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) 	__le16 ByteCount;	/* bcc = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) } __attribute__((packed)) QUERY_INFORMATION_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) typedef struct smb_com_setattr_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) 	struct smb_hdr hdr; /* wct = 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) 	__le16 attr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) 	__le16 time_low;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) 	__le16 time_high;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) 	__le16 reserved[5]; /* must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) 	__u16  ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) 	__u8   BufferFormat; /* 4 = ASCII */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) 	unsigned char fileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) } __attribute__((packed)) SETATTR_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) typedef struct smb_com_setattr_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) 	struct smb_hdr hdr;     /* wct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) 	__u16 ByteCount;        /* bct = 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) } __attribute__((packed)) SETATTR_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) /* empty wct response to setattr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) /*******************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) /* NT Transact structure definitions follow            */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) /* Currently only ioctl, acl (get security descriptor) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) /* and notify are implemented                          */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) /*******************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) typedef struct smb_com_ntransact_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) 	struct smb_hdr hdr; /* wct >= 19 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) 	__u16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) 	__le32 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) 	__le32 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) 	__u8 SetupCount; /* four setup words follow subcommand */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) 	/* SNIA spec incorrectly included spurious pad here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) 	__le16 SubCommand; /* 2 = IOCTL/FSCTL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) 	/* SetupCount words follow then */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) 	__u8 Pad[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) 	__u8 Parms[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) } __attribute__((packed)) NTRANSACT_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) typedef struct smb_com_ntransact_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) 	struct smb_hdr hdr;     /* wct = 18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) 	__u8 Reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) 	__le32 ParameterDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) 	__le32 DataDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) 	__u8 SetupCount;   /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) 	/* __u8 Pad[3]; */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) 	/* parms and data follow */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) } __attribute__((packed)) NTRANSACT_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) /* See MS-SMB 2.2.7.2.1.1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) struct srv_copychunk {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) 	__le64 SourceOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) 	__le64 DestinationOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) 	__le32 CopyLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) 	__u32  Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) typedef struct smb_com_transaction_ioctl_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) 	struct smb_hdr hdr;	/* wct = 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) 	__u16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) 	__le32 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) 	__le32 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354) 	__u8 SetupCount; /* four setup words follow subcommand */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355) 	/* SNIA spec incorrectly included spurious pad here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356) 	__le16 SubCommand; /* 2 = IOCTL/FSCTL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357) 	__le32 FunctionCode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) 	__u8 IsFsctl;  /* 1 = File System Control 0 = device control (IOCTL) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) 	__u8 IsRootFlag; /* 1 = apply command to root of share (must be DFS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) 	__u8 Pad[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) 	__u8 Data[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) } __attribute__((packed)) TRANSACT_IOCTL_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) typedef struct smb_com_transaction_compr_ioctl_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) 	struct smb_hdr hdr;	/* wct = 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369) 	__u16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) 	__le32 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) 	__le32 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) 	__u8 SetupCount; /* four setup words follow subcommand */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) 	/* SNIA spec incorrectly included spurious pad here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) 	__le16 SubCommand; /* 2 = IOCTL/FSCTL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) 	__le32 FunctionCode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) 	__u8 IsFsctl;  /* 1 = File System Control 0 = device control (IOCTL) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) 	__u8 IsRootFlag; /* 1 = apply command to root of share (must be DFS) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) 	__u8 Pad[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) 	__le16 compression_state;  /* See below for valid flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) } __attribute__((packed)) TRANSACT_COMPR_IOCTL_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) /* compression state flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) #define COMPRESSION_FORMAT_NONE		0x0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) #define COMPRESSION_FORMAT_DEFAULT	0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) #define COMPRESSION_FORMAT_LZNT1	0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) typedef struct smb_com_transaction_ioctl_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) 	struct smb_hdr hdr;	/* wct = 19 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) 	__u8 Reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) 	__le32 ParameterDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) 	__le32 DataDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) 	__u8 SetupCount;	/* 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) 	__le16 ReturnedDataLen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) } __attribute__((packed)) TRANSACT_IOCTL_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) #define CIFS_ACL_OWNER 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) #define CIFS_ACL_GROUP 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) #define CIFS_ACL_DACL  4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) #define CIFS_ACL_SACL  8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) typedef struct smb_com_transaction_qsec_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) 	struct smb_hdr hdr;     /* wct = 19 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419) 	__u16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) 	__le32 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) 	__le32 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) 	__u8 SetupCount; /* no setup words follow subcommand */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) 	/* SNIA spec incorrectly included spurious pad here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) 	__le16 SubCommand; /* 6 = QUERY_SECURITY_DESC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) 	__le16 ByteCount; /* bcc = 3 + 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) 	__u8 Pad[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) 	__le32 AclFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) } __attribute__((packed)) QUERY_SEC_DESC_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) typedef struct smb_com_transaction_ssec_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) 	struct smb_hdr hdr;     /* wct = 19 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) 	__u16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) 	__le32 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) 	__le32 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) 	__u8 SetupCount; /* no setup words follow subcommand */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) 	/* SNIA spec incorrectly included spurious pad here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) 	__le16 SubCommand; /* 3 = SET_SECURITY_DESC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) 	__le16 ByteCount; /* bcc = 3 + 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) 	__u8 Pad[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) 	__le32 AclFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) } __attribute__((packed)) SET_SEC_DESC_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) typedef struct smb_com_transaction_change_notify_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) 	struct smb_hdr hdr;     /* wct = 23 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) 	__u16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) 	__le32 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) 	__le32 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) 	__u8 SetupCount; /* four setup words follow subcommand */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) 	/* SNIA spec incorrectly included spurious pad here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) 	__le16 SubCommand;/* 4 = Change Notify */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) 	__le32 CompletionFilter;  /* operation to monitor */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) 	__u8 WatchTree;  /* 1 = Monitor subdirectories */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) 	__u8 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) /* 	__u8 Pad[3];*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) /*	__u8 Data[1];*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) } __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) /* BB eventually change to use generic ntransact rsp struct
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486)       and validation routine */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) typedef struct smb_com_transaction_change_notify_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) 	struct smb_hdr hdr;	/* wct = 18 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) 	__u8 Reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) 	__le32 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) 	__le32 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) 	__le32 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) 	__le32 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) 	__le32 ParameterDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) 	__le32 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) 	__le32 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) 	__le32 DataDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) 	__u8 SetupCount;   /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) 	/* __u8 Pad[3]; */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) } __attribute__((packed)) TRANSACT_CHANGE_NOTIFY_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) /* Completion Filter flags for Notify */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) #define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) #define FILE_NOTIFY_CHANGE_DIR_NAME     0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) #define FILE_NOTIFY_CHANGE_NAME         0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) #define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) #define FILE_NOTIFY_CHANGE_SIZE         0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) #define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) #define FILE_NOTIFY_CHANGE_LAST_ACCESS  0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) #define FILE_NOTIFY_CHANGE_CREATION     0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) #define FILE_NOTIFY_CHANGE_EA           0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) #define FILE_NOTIFY_CHANGE_SECURITY     0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) #define FILE_NOTIFY_CHANGE_STREAM_NAME  0x00000200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) #define FILE_NOTIFY_CHANGE_STREAM_SIZE  0x00000400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) #define FILE_ACTION_ADDED		0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) #define FILE_ACTION_REMOVED		0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) #define FILE_ACTION_MODIFIED		0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) #define FILE_ACTION_RENAMED_OLD_NAME	0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) #define FILE_ACTION_RENAMED_NEW_NAME	0x00000005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) #define FILE_ACTION_ADDED_STREAM	0x00000006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) #define FILE_ACTION_REMOVED_STREAM	0x00000007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) #define FILE_ACTION_MODIFIED_STREAM	0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) /* response contains array of the following structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) struct file_notify_information {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) 	__le32 NextEntryOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) 	__le32 Action;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) 	__le32 FileNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) 	__u8  FileName[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) /* For IO_REPARSE_TAG_SYMLINK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) struct reparse_symlink_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) 	__le32	ReparseTag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) 	__le16	ReparseDataLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) 	__u16	Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) 	__le16	SubstituteNameOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) 	__le16	SubstituteNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) 	__le16	PrintNameOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542) 	__le16	PrintNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) 	__le32	Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) 	char	PathBuffer[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) /* Flag above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) #define SYMLINK_FLAG_RELATIVE 0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) /* For IO_REPARSE_TAG_NFS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) #define NFS_SPECFILE_LNK	0x00000000014B4E4C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) #define NFS_SPECFILE_CHR	0x0000000000524843
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) #define NFS_SPECFILE_BLK	0x00000000004B4C42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554) #define NFS_SPECFILE_FIFO	0x000000004F464946
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) #define NFS_SPECFILE_SOCK	0x000000004B434F53
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556) struct reparse_posix_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557) 	__le32	ReparseTag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558) 	__le16	ReparseDataLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559) 	__u16	Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560) 	__le64	InodeType; /* LNK, FIFO, CHR etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) 	char	PathBuffer[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) struct cifs_quota_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) 	__u32	rsrvd1;  /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) 	__u32	sid_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567) 	__u64	rsrvd2;  /* 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) 	__u64	space_used;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) 	__u64	soft_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) 	__u64	hard_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) 	char	sid[1];  /* variable size? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) /* quota sub commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) #define QUOTA_LIST_CONTINUE	    0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) #define QUOTA_LIST_START	0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) #define QUOTA_FOR_SID		0x101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) struct trans2_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) 	/* struct smb_hdr hdr precedes. Set wct = 14+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) 	__u8 SetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) 	__le16 SubCommand; /* 1st setup word - SetupCount words follow */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) struct smb_t2_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) 	struct smb_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) 	struct trans2_req t2_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) struct trans2_resp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) 	/* struct smb_hdr hdr precedes. Note wct = 10 + setup count */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) 	__u16 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) 	__le16 ParameterDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) 	__le16 DataDisplacement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) 	__u8 SetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) 	__u8 Reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) 	/* SetupWords[SetupCount];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) 	__u16 Reserved2;*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621) 	/* data area follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) struct smb_t2_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) 	struct smb_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) 	struct trans2_resp t2_rsp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) /* PathInfo/FileInfo infolevels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) #define SMB_INFO_STANDARD                   1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) #define SMB_SET_FILE_EA                     2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) #define SMB_QUERY_FILE_EA_SIZE              2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) #define SMB_INFO_QUERY_EAS_FROM_LIST        3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) #define SMB_INFO_QUERY_ALL_EAS              4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) #define SMB_INFO_IS_NAME_VALID              6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) #define SMB_QUERY_FILE_BASIC_INFO       0x101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) #define SMB_QUERY_FILE_STANDARD_INFO    0x102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) #define SMB_QUERY_FILE_EA_INFO          0x103
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) #define SMB_QUERY_FILE_NAME_INFO        0x104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) #define SMB_QUERY_FILE_ALLOCATION_INFO  0x105
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) #define SMB_QUERY_FILE_END_OF_FILEINFO  0x106
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) #define SMB_QUERY_FILE_ALL_INFO         0x107
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) #define SMB_QUERY_ALT_NAME_INFO         0x108
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) #define SMB_QUERY_FILE_STREAM_INFO      0x109
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) #define SMB_QUERY_FILE_COMPRESSION_INFO 0x10B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646) #define SMB_QUERY_FILE_UNIX_BASIC       0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) #define SMB_QUERY_FILE_UNIX_LINK        0x201
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) #define SMB_QUERY_POSIX_ACL             0x204
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) #define SMB_QUERY_XATTR                 0x205  /* e.g. system EA name space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) #define SMB_QUERY_ATTR_FLAGS            0x206  /* append,immutable etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) #define SMB_QUERY_POSIX_PERMISSION      0x207
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652) #define SMB_QUERY_POSIX_LOCK            0x208
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653) /* #define SMB_POSIX_OPEN               0x209 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654) /* #define SMB_POSIX_UNLINK             0x20a */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655) #define SMB_QUERY_FILE__UNIX_INFO2      0x20b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656) #define SMB_QUERY_FILE_INTERNAL_INFO    0x3ee
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) #define SMB_QUERY_FILE_ACCESS_INFO      0x3f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) #define SMB_QUERY_FILE_NAME_INFO2       0x3f1 /* 0x30 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) #define SMB_QUERY_FILE_POSITION_INFO    0x3f6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) #define SMB_QUERY_FILE_MODE_INFO        0x3f8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) #define SMB_QUERY_FILE_ALGN_INFO        0x3f9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) #define SMB_SET_FILE_BASIC_INFO	        0x101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) #define SMB_SET_FILE_DISPOSITION_INFO   0x102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666) #define SMB_SET_FILE_ALLOCATION_INFO    0x103
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667) #define SMB_SET_FILE_END_OF_FILE_INFO   0x104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668) #define SMB_SET_FILE_UNIX_BASIC         0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669) #define SMB_SET_FILE_UNIX_LINK          0x201
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670) #define SMB_SET_FILE_UNIX_HLINK         0x203
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671) #define SMB_SET_POSIX_ACL               0x204
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672) #define SMB_SET_XATTR                   0x205
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) #define SMB_SET_ATTR_FLAGS              0x206  /* append, immutable etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) #define SMB_SET_POSIX_LOCK              0x208
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) #define SMB_POSIX_OPEN                  0x209
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) #define SMB_POSIX_UNLINK                0x20a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) #define SMB_SET_FILE_UNIX_INFO2         0x20b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) #define SMB_SET_FILE_BASIC_INFO2        0x3ec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679) #define SMB_SET_FILE_RENAME_INFORMATION 0x3f2 /* BB check if qpathinfo too */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680) #define SMB_FILE_ALL_INFO2              0x3fa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681) #define SMB_SET_FILE_ALLOCATION_INFO2   0x3fb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682) #define SMB_SET_FILE_END_OF_FILE_INFO2  0x3fc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683) #define SMB_FILE_MOVE_CLUSTER_INFO      0x407
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684) #define SMB_FILE_QUOTA_INFO             0x408
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) #define SMB_FILE_REPARSEPOINT_INFO      0x409
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) #define SMB_FILE_MAXIMUM_INFO           0x40d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) /* Find File infolevels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) #define SMB_FIND_FILE_INFO_STANDARD       0x001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) #define SMB_FIND_FILE_QUERY_EA_SIZE       0x002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) #define SMB_FIND_FILE_QUERY_EAS_FROM_LIST 0x003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) #define SMB_FIND_FILE_DIRECTORY_INFO      0x101
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) #define SMB_FIND_FILE_FULL_DIRECTORY_INFO 0x102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) #define SMB_FIND_FILE_NAMES_INFO          0x103
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) #define SMB_FIND_FILE_BOTH_DIRECTORY_INFO 0x104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) #define SMB_FIND_FILE_ID_FULL_DIR_INFO    0x105
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697) #define SMB_FIND_FILE_ID_BOTH_DIR_INFO    0x106
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) #define SMB_FIND_FILE_UNIX                0x202
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) #define SMB_FIND_FILE_POSIX_INFO          0x064
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) typedef struct smb_com_transaction2_qpi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) 	struct smb_hdr hdr;	/* wct = 14+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) 	__u8 SetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) 	__le16 SubCommand;	/* one setup word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) 	__le16 InformationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722) 	__u32 Reserved4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) } __attribute__((packed)) TRANSACTION2_QPI_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) typedef struct smb_com_transaction2_qpi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) 	struct smb_hdr hdr;	/* wct = 10 + SetupCount */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) 	__u16 Reserved2; /* parameter word is present for infolevels > 100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) } __attribute__((packed)) TRANSACTION2_QPI_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) typedef struct smb_com_transaction2_spi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) 	struct smb_hdr hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1745) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1746) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1747) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1748) 	__u8 SetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1749) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1750) 	__le16 SubCommand;	/* one setup word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1751) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1752) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1753) 	__u16 Pad1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1754) 	__le16 InformationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1755) 	__u32 Reserved4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1756) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1757) } __attribute__((packed)) TRANSACTION2_SPI_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1758) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1759) typedef struct smb_com_transaction2_spi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1760) 	struct smb_hdr hdr;	/* wct = 10 + SetupCount */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1761) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1762) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1763) 	__u16 Reserved2; /* parameter word is present for infolevels > 100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1764) } __attribute__((packed)) TRANSACTION2_SPI_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1765) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1766) struct set_file_rename {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1767) 	__le32 overwrite;   /* 1 = overwrite dest */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1768) 	__u32 root_fid;   /* zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1769) 	__le32 target_name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1770) 	char  target_name[];  /* Must be unicode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1771) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1772) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1773) struct smb_com_transaction2_sfi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1774) 	struct smb_hdr hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1775) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1776) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1777) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1778) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1779) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1780) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1781) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1782) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1783) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1784) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1785) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1786) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1787) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1788) 	__u8 SetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1789) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1790) 	__le16 SubCommand;	/* one setup word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1791) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1792) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1793) 	__u16 Pad1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1794) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1795) 	__le16 InformationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1796) 	__u16 Reserved4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1797) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1798) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1799) struct smb_com_transaction2_sfi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1800) 	struct smb_hdr hdr;	/* wct = 10 + SetupCount */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1801) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1802) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1803) 	__u16 Reserved2;	/* parameter word reserved -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1804) 					present for infolevels > 100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1805) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1806) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1807) struct smb_t2_qfi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1808) 	struct	smb_hdr hdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1809) 	struct	trans2_req t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1810) 	__u8	Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1811) 	__u16	Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1812) 	__le16	InformationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1813) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1814) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1815) struct smb_t2_qfi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1816) 	struct smb_hdr hdr;     /* wct = 10 + SetupCount */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1817) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1818) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1819) 	__u16 Reserved2;        /* parameter word reserved -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1820) 				   present for infolevels > 100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1821) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1822) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1823) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1824)  * Flags on T2 FINDFIRST and FINDNEXT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1825)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1826) #define CIFS_SEARCH_CLOSE_ALWAYS  0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1827) #define CIFS_SEARCH_CLOSE_AT_END  0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1828) #define CIFS_SEARCH_RETURN_RESUME 0x0004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1829) #define CIFS_SEARCH_CONTINUE_FROM_LAST 0x0008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1830) #define CIFS_SEARCH_BACKUP_SEARCH 0x0010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1831) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1832) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1833)  * Size of the resume key on FINDFIRST and FINDNEXT calls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1834)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1835) #define CIFS_SMB_RESUME_KEY_SIZE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1836) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1837) typedef struct smb_com_transaction2_ffirst_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1838) 	struct smb_hdr hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1839) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1840) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1841) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1842) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1843) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1844) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1845) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1846) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1847) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1848) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1849) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1850) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1851) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1852) 	__u8 SetupCount;	/* one */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1853) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1854) 	__le16 SubCommand;	/* TRANS2_FIND_FIRST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1855) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1856) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1857) 	__le16 SearchAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1858) 	__le16 SearchCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1859) 	__le16 SearchFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1860) 	__le16 InformationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1861) 	__le32 SearchStorageType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1862) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1863) } __attribute__((packed)) TRANSACTION2_FFIRST_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1864) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1865) typedef struct smb_com_transaction2_ffirst_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1866) 	struct smb_hdr hdr;	/* wct = 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1867) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1868) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1869) } __attribute__((packed)) TRANSACTION2_FFIRST_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1870) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1871) typedef struct smb_com_transaction2_ffirst_rsp_parms {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1872) 	__u16 SearchHandle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1873) 	__le16 SearchCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1874) 	__le16 EndofSearch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1875) 	__le16 EAErrorOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1876) 	__le16 LastNameOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1877) } __attribute__((packed)) T2_FFIRST_RSP_PARMS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1878) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1879) typedef struct smb_com_transaction2_fnext_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1880) 	struct smb_hdr hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1881) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1882) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1883) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1884) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1885) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1886) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1887) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1888) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1889) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1890) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1891) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1892) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1893) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1894) 	__u8 SetupCount;	/* one */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1895) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1896) 	__le16 SubCommand;	/* TRANS2_FIND_NEXT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1897) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1898) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1899) 	__u16 SearchHandle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1900) 	__le16 SearchCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1901) 	__le16 InformationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1902) 	__u32 ResumeKey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1903) 	__le16 SearchFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1904) 	char ResumeFileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1905) } __attribute__((packed)) TRANSACTION2_FNEXT_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1906) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1907) typedef struct smb_com_transaction2_fnext_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1908) 	struct smb_hdr hdr;	/* wct = 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1909) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1910) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1911) } __attribute__((packed)) TRANSACTION2_FNEXT_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1912) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1913) typedef struct smb_com_transaction2_fnext_rsp_parms {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1914) 	__le16 SearchCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1915) 	__le16 EndofSearch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1916) 	__le16 EAErrorOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1917) 	__le16 LastNameOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1918) } __attribute__((packed)) T2_FNEXT_RSP_PARMS;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1919) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1920) /* QFSInfo Levels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1921) #define SMB_INFO_ALLOCATION         1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1922) #define SMB_INFO_VOLUME             2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1923) #define SMB_QUERY_FS_VOLUME_INFO    0x102
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1924) #define SMB_QUERY_FS_SIZE_INFO      0x103
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1925) #define SMB_QUERY_FS_DEVICE_INFO    0x104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1926) #define SMB_QUERY_FS_ATTRIBUTE_INFO 0x105
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1927) #define SMB_QUERY_CIFS_UNIX_INFO    0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1928) #define SMB_QUERY_POSIX_FS_INFO     0x201
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1929) #define SMB_QUERY_POSIX_WHO_AM_I    0x202
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1930) #define SMB_REQUEST_TRANSPORT_ENCRYPTION 0x203
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1931) #define SMB_QUERY_FS_PROXY          0x204 /* WAFS enabled. Returns structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1932) 					    FILE_SYSTEM__UNIX_INFO to tell
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1933) 					    whether new NTIOCTL available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1934) 					    (0xACE) for WAN friendly SMB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1935) 					    operations to be carried */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1936) #define SMB_QUERY_LABEL_INFO        0x3ea
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1937) #define SMB_QUERY_FS_QUOTA_INFO     0x3ee
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1938) #define SMB_QUERY_FS_FULL_SIZE_INFO 0x3ef
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1939) #define SMB_QUERY_OBJECTID_INFO     0x3f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1940) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1941) typedef struct smb_com_transaction2_qfsi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1942) 	struct smb_hdr hdr;	/* wct = 14+ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1943) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1944) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1945) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1946) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1947) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1948) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1949) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1950) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1951) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1952) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1953) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1954) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1955) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1956) 	__u8 SetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1957) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1958) 	__le16 SubCommand;	/* one setup word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1959) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1960) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1961) 	__le16 InformationLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1962) } __attribute__((packed)) TRANSACTION2_QFSI_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1963) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1964) typedef struct smb_com_transaction_qfsi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1965) 	struct smb_hdr hdr;	/* wct = 10 + SetupCount */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1966) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1967) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1968) 	__u8 Pad;	/* may be three bytes? *//* followed by data area */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1969) } __attribute__((packed)) TRANSACTION2_QFSI_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1970) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1971) typedef struct whoami_rsp_data { /* Query level 0x202 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1972) 	__u32 flags; /* 0 = Authenticated user 1 = GUEST */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1973) 	__u32 mask; /* which flags bits server understands ie 0x0001 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1974) 	__u64 unix_user_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1975) 	__u64 unix_user_gid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1976) 	__u32 number_of_supplementary_gids; /* may be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1977) 	__u32 number_of_sids; /* may be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1978) 	__u32 length_of_sid_array; /* in bytes - may be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1979) 	__u32 pad; /* reserved - MBZ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1980) 	/* __u64 gid_array[0]; */  /* may be empty */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1981) 	/* __u8 * psid_list */  /* may be empty */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1982) } __attribute__((packed)) WHOAMI_RSP_DATA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1983) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1984) /* SETFSInfo Levels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1985) #define SMB_SET_CIFS_UNIX_INFO    0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1986) /* level 0x203 is defined above in list of QFS info levels */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1987) /* #define SMB_REQUEST_TRANSPORT_ENCRYPTION 0x203 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1988) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1989) /* Level 0x200 request structure follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1990) typedef struct smb_com_transaction2_setfsi_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1991) 	struct smb_hdr hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1992) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1993) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1994) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1995) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1996) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1997) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1998) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1999) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2000) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2001) 	__le16 ParameterCount;	/* 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2002) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2003) 	__le16 DataCount;	/* 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2004) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2005) 	__u8 SetupCount;	/* one */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2006) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2007) 	__le16 SubCommand;	/* TRANS2_SET_FS_INFORMATION */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2008) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2009) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2010) 	__u16 FileNum;		/* Parameters start. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2011) 	__le16 InformationLevel;/* Parameters end. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2012) 	__le16 ClientUnixMajor; /* Data start. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2013) 	__le16 ClientUnixMinor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2014) 	__le64 ClientUnixCap;   /* Data end */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2015) } __attribute__((packed)) TRANSACTION2_SETFSI_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2016) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2017) /* level 0x203 request structure follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2018) typedef struct smb_com_transaction2_setfs_enc_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2019) 	struct smb_hdr hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2020) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2021) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2022) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2023) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2024) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2025) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2026) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2027) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2028) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2029) 	__le16 ParameterCount;	/* 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2030) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2031) 	__le16 DataCount;	/* 12 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2032) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2033) 	__u8 SetupCount;	/* one */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2034) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2035) 	__le16 SubCommand;	/* TRANS2_SET_FS_INFORMATION */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2036) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2037) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2038) 	__u16  Reserved4;	/* Parameters start. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2039) 	__le16 InformationLevel;/* Parameters end. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2040) 	/* NTLMSSP Blob, Data start. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2041) } __attribute__((packed)) TRANSACTION2_SETFSI_ENC_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2042) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2043) /* response for setfsinfo levels 0x200 and 0x203 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2044) typedef struct smb_com_transaction2_setfsi_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2045) 	struct smb_hdr hdr;	/* wct = 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2046) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2047) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2048) } __attribute__((packed)) TRANSACTION2_SETFSI_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2049) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2050) typedef struct smb_com_transaction2_get_dfs_refer_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2051) 	struct smb_hdr hdr;	/* wct = 15 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2052) 	__le16 TotalParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2053) 	__le16 TotalDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2054) 	__le16 MaxParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2055) 	__le16 MaxDataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2056) 	__u8 MaxSetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2057) 	__u8 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2058) 	__le16 Flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2059) 	__le32 Timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2060) 	__u16 Reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2061) 	__le16 ParameterCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2062) 	__le16 ParameterOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2063) 	__le16 DataCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2064) 	__le16 DataOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2065) 	__u8 SetupCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2066) 	__u8 Reserved3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2067) 	__le16 SubCommand;	/* one setup word */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2068) 	__le16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2069) 	__u8 Pad[3];		/* Win2K has sent 0x0F01 (max response length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2070) 				   perhaps?) followed by one byte pad - doesn't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2071) 				   seem to matter though */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2072) 	__le16 MaxReferralLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2073) 	char RequestFileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2074) } __attribute__((packed)) TRANSACTION2_GET_DFS_REFER_REQ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2075) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2076) #define DFS_VERSION cpu_to_le16(0x0003)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2077) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2078) /* DFS server target type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2079) #define DFS_TYPE_LINK 0x0000  /* also for sysvol targets */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2080) #define DFS_TYPE_ROOT 0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2081) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2082) /* Referral Entry Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2083) #define DFS_NAME_LIST_REF 0x0200 /* set for domain or DC referral responses */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2084) #define DFS_TARGET_SET_BOUNDARY 0x0400 /* only valid with version 4 dfs req */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2085) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2086) typedef struct dfs_referral_level_3 { /* version 4 is same, + one flag bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2087) 	__le16 VersionNumber;  /* must be 3 or 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2088) 	__le16 Size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2089) 	__le16 ServerType; /* 0x0001 = root targets; 0x0000 = link targets */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2090) 	__le16 ReferralEntryFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2091) 	__le32 TimeToLive;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2092) 	__le16 DfsPathOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2093) 	__le16 DfsAlternatePathOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2094) 	__le16 NetworkAddressOffset; /* offset of the link target */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2095) 	__u8   ServiceSiteGuid[16];  /* MBZ, ignored */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2096) } __attribute__((packed)) REFERRAL3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2097) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2098) struct get_dfs_referral_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2099) 	__le16 PathConsumed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2100) 	__le16 NumberOfReferrals;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2101) 	__le32 DFSFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2102) 	REFERRAL3 referrals[1];	/* array of level 3 dfs_referral structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2103) 	/* followed by the strings pointed to by the referral structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2104) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2106) typedef struct smb_com_transaction_get_dfs_refer_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2107) 	struct smb_hdr hdr;	/* wct = 10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2108) 	struct trans2_resp t2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2109) 	__u16 ByteCount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2110) 	__u8 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2111) 	struct get_dfs_referral_rsp dfs_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2112) } __packed TRANSACTION2_GET_DFS_REFER_RSP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2114) /* DFS Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2115) #define DFSREF_REFERRAL_SERVER  0x00000001 /* all targets are DFS roots */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2116) #define DFSREF_STORAGE_SERVER   0x00000002 /* no further ref requests needed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2117) #define DFSREF_TARGET_FAILBACK  0x00000004 /* only for DFS referral version 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2119) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2120)  ************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2121)  * All structs for everything above the SMB PDUs themselves
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2122)  * (such as the T2 level specific data) go here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2123)  ************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2124)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2126) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2127)  * Information on a server
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2128)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2130) struct serverInfo {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2131) 	char name[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2132) 	unsigned char versionMajor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2133) 	unsigned char versionMinor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2134) 	unsigned long type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2135) 	unsigned int commentOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2136) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2138) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2139)  * The following structure is the format of the data returned on a NetShareEnum
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2140)  * with level "90" (x5A)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2141)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2143) struct shareInfo {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2144) 	char shareName[13];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2145) 	char pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2146) 	unsigned short type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2147) 	unsigned int commentOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2148) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2150) struct aliasInfo {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2151) 	char aliasName[9];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2152) 	char pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2153) 	unsigned int commentOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2154) 	unsigned char type[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2155) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2157) struct aliasInfo92 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2158) 	int aliasNameOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2159) 	int serverNameOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2160) 	int shareNameOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2161) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2163) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2164) 	__le64 TotalAllocationUnits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2165) 	__le64 FreeAllocationUnits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2166) 	__le32 SectorsPerAllocationUnit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2167) 	__le32 BytesPerSector;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2168) } __attribute__((packed)) FILE_SYSTEM_INFO;	/* size info, level 0x103 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2170) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2171) 	__le32 fsid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2172) 	__le32 SectorsPerAllocationUnit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2173) 	__le32 TotalAllocationUnits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2174) 	__le32 FreeAllocationUnits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2175) 	__le16  BytesPerSector;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2176) } __attribute__((packed)) FILE_SYSTEM_ALLOC_INFO;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2178) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2179) 	__le16 MajorVersionNumber;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2180) 	__le16 MinorVersionNumber;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2181) 	__le64 Capability;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2182) } __attribute__((packed)) FILE_SYSTEM_UNIX_INFO; /* Unix extension level 0x200*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2184) /* Version numbers for CIFS UNIX major and minor. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2185) #define CIFS_UNIX_MAJOR_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2186) #define CIFS_UNIX_MINOR_VERSION 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2188) /* Linux/Unix extensions capability flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2189) #define CIFS_UNIX_FCNTL_CAP             0x00000001 /* support for fcntl locks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2190) #define CIFS_UNIX_POSIX_ACL_CAP         0x00000002 /* support getfacl/setfacl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2191) #define CIFS_UNIX_XATTR_CAP             0x00000004 /* support new namespace   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2192) #define CIFS_UNIX_EXTATTR_CAP           0x00000008 /* support chattr/chflag   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2193) #define CIFS_UNIX_POSIX_PATHNAMES_CAP   0x00000010 /* Allow POSIX path chars  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2194) #define CIFS_UNIX_POSIX_PATH_OPS_CAP    0x00000020 /* Allow new POSIX path based
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2195) 						      calls including posix open
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2196) 						      and posix unlink */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2197) #define CIFS_UNIX_LARGE_READ_CAP        0x00000040 /* support reads >128K (up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2198) 						      to 0xFFFF00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2199) #define CIFS_UNIX_LARGE_WRITE_CAP       0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2200) #define CIFS_UNIX_TRANSPORT_ENCRYPTION_CAP 0x00000100 /* can do SPNEGO crypt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2201) #define CIFS_UNIX_TRANSPORT_ENCRYPTION_MANDATORY_CAP  0x00000200 /* must do  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2202) #define CIFS_UNIX_PROXY_CAP             0x00000400 /* Proxy cap: 0xACE ioctl and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2203) 						      QFS PROXY call */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2204) #ifdef CONFIG_CIFS_POSIX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2205) /* presumably don't need the 0x20 POSIX_PATH_OPS_CAP since we never send
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2206)    LockingX instead of posix locking call on unix sess (and we do not expect
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2207)    LockingX to use different (ie Windows) semantics than posix locking on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2208)    the same session (if WINE needs to do this later, we can add this cap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2209)    back in later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2210) /* #define CIFS_UNIX_CAP_MASK              0x000000fb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2211) #define CIFS_UNIX_CAP_MASK              0x000003db
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2212) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2213) #define CIFS_UNIX_CAP_MASK              0x00000013
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2214) #endif /* CONFIG_CIFS_POSIX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2215) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2217) #define CIFS_POSIX_EXTENSIONS           0x00000010 /* support for new QFSInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2219) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2220) 	/* For undefined recommended transfer size return -1 in that field */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2221) 	__le32 OptimalTransferSize;  /* bsize on some os, iosize on other os */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2222) 	__le32 BlockSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2223)     /* The next three fields are in terms of the block size.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2224) 	(above). If block size is unknown, 4096 would be a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2225) 	reasonable block size for a server to report.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2226) 	Note that returning the blocks/blocksavail removes need
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2227) 	to make a second call (to QFSInfo level 0x103 to get this info.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2228) 	UserBlockAvail is typically less than or equal to BlocksAvail,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2229) 	if no distinction is made return the same value in each */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2230) 	__le64 TotalBlocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2231) 	__le64 BlocksAvail;       /* bfree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2232) 	__le64 UserBlocksAvail;   /* bavail */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2233)     /* For undefined Node fields or FSID return -1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2234) 	__le64 TotalFileNodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2235) 	__le64 FreeFileNodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2236) 	__le64 FileSysIdentifier;   /* fsid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2237) 	/* NB Namelen comes from FILE_SYSTEM_ATTRIBUTE_INFO call */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2238) 	/* NB flags can come from FILE_SYSTEM_DEVICE_INFO call   */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2239) } __attribute__((packed)) FILE_SYSTEM_POSIX_INFO;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2240) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2241) /* DeviceType Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2242) #define FILE_DEVICE_CD_ROM              0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2243) #define FILE_DEVICE_CD_ROM_FILE_SYSTEM  0x00000003
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2244) #define FILE_DEVICE_DFS                 0x00000006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2245) #define FILE_DEVICE_DISK                0x00000007
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2246) #define FILE_DEVICE_DISK_FILE_SYSTEM    0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2247) #define FILE_DEVICE_FILE_SYSTEM         0x00000009
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2248) #define FILE_DEVICE_NAMED_PIPE          0x00000011
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2249) #define FILE_DEVICE_NETWORK             0x00000012
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2250) #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2251) #define FILE_DEVICE_NULL                0x00000015
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2252) #define FILE_DEVICE_PARALLEL_PORT       0x00000016
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2253) #define FILE_DEVICE_PRINTER             0x00000018
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2254) #define FILE_DEVICE_SERIAL_PORT         0x0000001b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2255) #define FILE_DEVICE_STREAMS             0x0000001e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2256) #define FILE_DEVICE_TAPE                0x0000001f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2257) #define FILE_DEVICE_TAPE_FILE_SYSTEM    0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2258) #define FILE_DEVICE_VIRTUAL_DISK        0x00000024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2259) #define FILE_DEVICE_NETWORK_REDIRECTOR  0x00000028
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2261) /* Device Characteristics */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2262) #define FILE_REMOVABLE_MEDIA			0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2263) #define FILE_READ_ONLY_DEVICE			0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2264) #define FILE_FLOPPY_DISKETTE			0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2265) #define FILE_WRITE_ONCE_MEDIA			0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2266) #define FILE_REMOTE_DEVICE			0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2267) #define FILE_DEVICE_IS_MOUNTED			0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2268) #define FILE_VIRTUAL_VOLUME			0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2269) #define FILE_DEVICE_SECURE_OPEN			0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2270) #define FILE_CHARACTERISTIC_TS_DEVICE		0x00001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2271) #define FILE_CHARACTERISTIC_WEBDAV_DEVICE	0x00002000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2272) #define FILE_PORTABLE_DEVICE			0x00004000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2273) #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2274) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2275) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2276) 	__le32 DeviceType;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2277) 	__le32 DeviceCharacteristics;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2278) } __attribute__((packed)) FILE_SYSTEM_DEVICE_INFO; /* device info level 0x104 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2279) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2280) /* minimum includes first three fields, and empty FS Name */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2281) #define MIN_FS_ATTR_INFO_SIZE 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2284) /* List of FileSystemAttributes - see 2.5.1 of MS-FSCC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2285) #define FILE_SUPPORTS_SPARSE_VDL	0x10000000 /* faster nonsparse extend */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2286) #define FILE_SUPPORTS_BLOCK_REFCOUNTING	0x08000000 /* allow ioctl dup extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2287) #define FILE_SUPPORT_INTEGRITY_STREAMS	0x04000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2288) #define FILE_SUPPORTS_USN_JOURNAL	0x02000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2289) #define FILE_SUPPORTS_OPEN_BY_FILE_ID	0x01000000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2290) #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2291) #define FILE_SUPPORTS_HARD_LINKS	0x00400000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2292) #define FILE_SUPPORTS_TRANSACTIONS	0x00200000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2293) #define FILE_SEQUENTIAL_WRITE_ONCE	0x00100000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2294) #define FILE_READ_ONLY_VOLUME		0x00080000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2295) #define FILE_NAMED_STREAMS		0x00040000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2296) #define FILE_SUPPORTS_ENCRYPTION	0x00020000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2297) #define FILE_SUPPORTS_OBJECT_IDS	0x00010000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2298) #define FILE_VOLUME_IS_COMPRESSED	0x00008000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2299) #define FILE_SUPPORTS_REMOTE_STORAGE	0x00000100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2300) #define FILE_SUPPORTS_REPARSE_POINTS	0x00000080
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2301) #define FILE_SUPPORTS_SPARSE_FILES	0x00000040
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2302) #define FILE_VOLUME_QUOTAS		0x00000020
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2303) #define FILE_FILE_COMPRESSION		0x00000010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2304) #define FILE_PERSISTENT_ACLS		0x00000008
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2305) #define FILE_UNICODE_ON_DISK		0x00000004
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2306) #define FILE_CASE_PRESERVED_NAMES	0x00000002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2307) #define FILE_CASE_SENSITIVE_SEARCH	0x00000001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2308) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2309) 	__le32 Attributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2310) 	__le32 MaxPathNameComponentLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2311) 	__le32 FileSystemNameLen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2312) 	char FileSystemName[52]; /* do not have to save this - get subset? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2313) } __attribute__((packed)) FILE_SYSTEM_ATTRIBUTE_INFO;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2314) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2315) /******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2316) /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2317) /******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2318) typedef struct { /* data block encoding of response to level 263 QPathInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2319) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2320) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2321) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2322) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2323) 	__le32 Attributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2324) 	__u32 Pad1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2325) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2326) 	__le64 EndOfFile;	/* size ie offset to first free byte in file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2327) 	__le32 NumberOfLinks;	/* hard links */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2328) 	__u8 DeletePending;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2329) 	__u8 Directory;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2330) 	__u16 Pad2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2331) 	__le64 IndexNumber;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2332) 	__le32 EASize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2333) 	__le32 AccessFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2334) 	__u64 IndexNumber1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2335) 	__le64 CurrentByteOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2336) 	__le32 Mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2337) 	__le32 AlignmentRequirement;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2338) 	__le32 FileNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2339) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2340) } __attribute__((packed)) FILE_ALL_INFO;	/* level 0x107 QPathInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2341) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2342) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2343) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2344) 	__le64 EndOfFile;	/* size ie offset to first free byte in file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2345) 	__le32 NumberOfLinks;	/* hard links */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2346) 	__u8 DeletePending;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2347) 	__u8 Directory;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2348) 	__u16 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2349) } __attribute__((packed)) FILE_STANDARD_INFO;	/* level 0x102 QPathInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2350) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2351) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2352) /* defines for enumerating possible values of the Unix type field below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2353) #define UNIX_FILE      0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2354) #define UNIX_DIR       1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2355) #define UNIX_SYMLINK   2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2356) #define UNIX_CHARDEV   3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2357) #define UNIX_BLOCKDEV  4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2358) #define UNIX_FIFO      5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2359) #define UNIX_SOCKET    6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2360) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2361) 	__le64 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2362) 	__le64 NumOfBytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2363) 	__le64 LastStatusChange; /*SNIA specs DCE time for the 3 time fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2364) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2365) 	__le64 LastModificationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2366) 	__le64 Uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2367) 	__le64 Gid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2368) 	__le32 Type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2369) 	__le64 DevMajor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2370) 	__le64 DevMinor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2371) 	__le64 UniqueId;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2372) 	__le64 Permissions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2373) 	__le64 Nlinks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2374) } __attribute__((packed)) FILE_UNIX_BASIC_INFO;	/* level 0x200 QPathInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2375) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2376) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2377) 	char LinkDest[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2378) } __attribute__((packed)) FILE_UNIX_LINK_INFO;	/* level 0x201 QPathInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2379) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2380) /* The following three structures are needed only for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2381) 	setting time to NT4 and some older servers via
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2382) 	the primitive DOS time format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2383) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2384) 	__u16 Day:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2385) 	__u16 Month:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2386) 	__u16 Year:7;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2387) } __attribute__((packed)) SMB_DATE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2388) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2389) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2390) 	__u16 TwoSeconds:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2391) 	__u16 Minutes:6;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2392) 	__u16 Hours:5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2393) } __attribute__((packed)) SMB_TIME;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2394) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2395) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2396) 	__le16 CreationDate; /* SMB Date see above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2397) 	__le16 CreationTime; /* SMB Time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2398) 	__le16 LastAccessDate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2399) 	__le16 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2400) 	__le16 LastWriteDate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2401) 	__le16 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2402) 	__le32 DataSize; /* File Size (EOF) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2403) 	__le32 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2404) 	__le16 Attributes; /* verify not u32 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2405) 	__le32 EASize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2406) } __attribute__((packed)) FILE_INFO_STANDARD;  /* level 1 SetPath/FileInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2407) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2408) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2409) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2410) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2411) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2412) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2413) 	__le32 Attributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2414) 	__u32 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2415) } __attribute__((packed)) FILE_BASIC_INFO;	/* size info, level 0x101 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2416) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2417) struct file_allocation_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2418) 	__le64 AllocationSize; /* Note old Samba srvr rounds this up too much */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2419) } __attribute__((packed));	/* size used on disk, for level 0x103 for set,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2420) 				   0x105 for query */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2421) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2422) struct file_end_of_file_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2423) 	__le64 FileSize;		/* offset to end of file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2424) } __attribute__((packed)); /* size info, level 0x104 for set, 0x106 for query */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2425) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2426) struct file_alt_name_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2427) 	__u8   alt_name[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2428) } __attribute__((packed));      /* level 0x0108 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2429) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2430) struct file_stream_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2431) 	__le32 number_of_streams;  /* BB check sizes and verify location */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2432) 	/* followed by info on streams themselves
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2433) 		u64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2434) 		u64 allocation_size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2435) 		stream info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2436) };      /* level 0x109 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2437) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2438) struct file_compression_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2439) 	__le64 compressed_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2440) 	__le16 format;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2441) 	__u8   unit_shift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2442) 	__u8   ch_shift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2443) 	__u8   cl_shift;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2444) 	__u8   pad[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2445) } __attribute__((packed));      /* level 0x10b */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2446) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2447) /* POSIX ACL set/query path info structures */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2448) #define CIFS_ACL_VERSION 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2449) struct cifs_posix_ace { /* access control entry (ACE) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2450) 	__u8  cifs_e_tag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2451) 	__u8  cifs_e_perm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2452) 	__le64 cifs_uid; /* or gid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2453) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2454) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2455) struct cifs_posix_acl { /* access conrol list  (ACL) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2456) 	__le16	version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2457) 	__le16	access_entry_count;  /* access ACL - count of entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2458) 	__le16	default_entry_count; /* default ACL - count of entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2459) 	struct cifs_posix_ace ace_array[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2460) 	/* followed by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2461) 	struct cifs_posix_ace default_ace_arraay[] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2462) } __attribute__((packed));  /* level 0x204 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2463) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2464) /* types of access control entries already defined in posix_acl.h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2465) /* #define CIFS_POSIX_ACL_USER_OBJ	 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2466) #define CIFS_POSIX_ACL_USER      0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2467) #define CIFS_POSIX_ACL_GROUP_OBJ 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2468) #define CIFS_POSIX_ACL_GROUP     0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2469) #define CIFS_POSIX_ACL_MASK      0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2470) #define CIFS_POSIX_ACL_OTHER     0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2471) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2472) /* types of perms */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2473) /* #define CIFS_POSIX_ACL_EXECUTE   0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2474) #define CIFS_POSIX_ACL_WRITE     0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2475) #define CIFS_POSIX_ACL_READ	     0x04 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2476) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2477) /* end of POSIX ACL definitions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2478) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2479) /* POSIX Open Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2480) #define SMB_O_RDONLY 	 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2481) #define SMB_O_WRONLY 	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2482) #define SMB_O_RDWR 	0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2483) #define SMB_O_CREAT 	0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2484) #define SMB_O_EXCL 	0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2485) #define SMB_O_TRUNC 	0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2486) #define SMB_O_APPEND 	0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2487) #define SMB_O_SYNC 	0x100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2488) #define SMB_O_DIRECTORY 0x200
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2489) #define SMB_O_NOFOLLOW 	0x400
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2490) #define SMB_O_DIRECT 	0x800
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2491) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2492) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2493) 	__le32 OpenFlags; /* same as NT CreateX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2494) 	__le32 PosixOpenFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2495) 	__le64 Permissions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2496) 	__le16 Level; /* reply level requested (see QPathInfo levels) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2497) } __attribute__((packed)) OPEN_PSX_REQ; /* level 0x209 SetPathInfo data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2498) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2499) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2500) 	__le16 OplockFlags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2501) 	__u16 Fid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2502) 	__le32 CreateAction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2503) 	__le16 ReturnedLevel;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2504) 	__le16 Pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2505) 	/* struct following varies based on requested level */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2506) } __attribute__((packed)) OPEN_PSX_RSP; /* level 0x209 SetPathInfo data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2507) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2508) #define SMB_POSIX_UNLINK_FILE_TARGET		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2509) #define SMB_POSIX_UNLINK_DIRECTORY_TARGET	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2510) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2511) struct unlink_psx_rq { /* level 0x20a SetPathInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2512) 	__le16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2513) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2514) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2515) struct file_internal_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2516) 	__le64  UniqueId; /* inode number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2517) } __attribute__((packed));      /* level 0x3ee */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2518) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2519) struct file_mode_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2520) 	__le32	Mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2521) } __attribute__((packed));      /* level 0x3f8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2522) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2523) struct file_attrib_tag {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2524) 	__le32 Attribute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2525) 	__le32 ReparseTag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2526) } __attribute__((packed));      /* level 0x40b */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2527) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2529) /********************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2530) /*  FindFirst/FindNext transact2 data buffer formats    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2531) /********************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2532) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2533) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2534) 	__le32 NextEntryOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2535) 	__u32 ResumeKey; /* as with FileIndex - no need to convert */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2536) 	FILE_UNIX_BASIC_INFO basic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2537) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2538) } __attribute__((packed)) FILE_UNIX_INFO; /* level 0x202 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2539) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2540) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2541) 	__le32 NextEntryOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2542) 	__u32 FileIndex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2543) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2544) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2545) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2546) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2547) 	__le64 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2548) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2549) 	__le32 ExtFileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2550) 	__le32 FileNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2551) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2552) } __attribute__((packed)) FILE_DIRECTORY_INFO;   /* level 0x101 FF resp data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2553) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2554) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2555) 	__le32 NextEntryOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2556) 	__u32 FileIndex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2557) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2558) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2559) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2560) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2561) 	__le64 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2562) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2563) 	__le32 ExtFileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2564) 	__le32 FileNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2565) 	__le32 EaSize; /* length of the xattrs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2566) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2567) } __attribute__((packed)) FILE_FULL_DIRECTORY_INFO; /* level 0x102 rsp data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2568) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2569) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2570) 	__le32 NextEntryOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2571) 	__u32 FileIndex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2572) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2573) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2574) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2575) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2576) 	__le64 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2577) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2578) 	__le32 ExtFileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2579) 	__le32 FileNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2580) 	__le32 EaSize; /* EA size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2581) 	__le32 Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2582) 	__le64 UniqueId; /* inode num - le since Samba puts ino in low 32 bit*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2583) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2584) } __attribute__((packed)) SEARCH_ID_FULL_DIR_INFO; /* level 0x105 FF rsp data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2585) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2586) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2587) 	__le32 NextEntryOffset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2588) 	__u32 FileIndex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2589) 	__le64 CreationTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2590) 	__le64 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2591) 	__le64 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2592) 	__le64 ChangeTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2593) 	__le64 EndOfFile;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2594) 	__le64 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2595) 	__le32 ExtFileAttributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2596) 	__le32 FileNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2597) 	__le32 EaSize; /* length of the xattrs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2598) 	__u8   ShortNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2599) 	__u8   Reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2600) 	__u8   ShortName[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2601) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2602) } __attribute__((packed)) FILE_BOTH_DIRECTORY_INFO; /* level 0x104 FFrsp data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2603) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2604) typedef struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2605) 	__u32  ResumeKey;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2606) 	__le16 CreationDate; /* SMB Date */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2607) 	__le16 CreationTime; /* SMB Time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2608) 	__le16 LastAccessDate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2609) 	__le16 LastAccessTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2610) 	__le16 LastWriteDate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2611) 	__le16 LastWriteTime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2612) 	__le32 DataSize; /* File Size (EOF) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2613) 	__le32 AllocationSize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2614) 	__le16 Attributes; /* verify not u32 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2615) 	__u8   FileNameLength;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2616) 	char FileName[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2617) } __attribute__((packed)) FIND_FILE_STANDARD_INFO; /* level 0x1 FF resp data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2618) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2619) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2620) struct win_dev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2621) 	unsigned char type[8]; /* IntxCHR or IntxBLK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2622) 	__le64 major;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2623) 	__le64 minor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2624) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2625) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2626) struct gea {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2627) 	unsigned char name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2628) 	char name[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2629) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2630) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2631) struct gealist {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2632) 	unsigned long list_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2633) 	struct gea list[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2634) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2635) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2636) struct fea {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2637) 	unsigned char EA_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2638) 	__u8 name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2639) 	__le16 value_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2640) 	char name[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2641) 	/* optionally followed by value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2642) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2643) /* flags for _FEA.fEA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2644) #define FEA_NEEDEA         0x80	/* need EA bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2645) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2646) struct fealist {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2647) 	__le32 list_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2648) 	struct fea list[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2649) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2650) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2651) /* used to hold an arbitrary blob of data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2652) struct data_blob {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2653) 	__u8 *data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2654) 	size_t length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2655) 	void (*free) (struct data_blob *data_blob);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2656) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2657) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2658) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2659) #ifdef CONFIG_CIFS_POSIX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2660) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2661) 	For better POSIX semantics from Linux client, (even better
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2662) 	than the existing CIFS Unix Extensions) we need updated PDUs for:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2663) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2664) 	1) PosixCreateX - to set and return the mode, inode#, device info and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2665) 	perhaps add a CreateDevice - to create Pipes and other special .inodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2666) 	Also note POSIX open flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2667) 	2) Close - to return the last write time to do cache across close
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2668) 		more safely
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2669) 	3) FindFirst return unique inode number - what about resume key, two
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2670) 	forms short (matches readdir) and full (enough info to cache inodes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2671) 	4) Mkdir - set mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2672) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2673) 	And under consideration:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2674) 	5) FindClose2 (return nanosecond timestamp ??)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2675) 	6) Use nanosecond timestamps throughout all time fields if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2676) 	   corresponding attribute flag is set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2677) 	7) sendfile - handle based copy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2678) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2679) 	what about fixing 64 bit alignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2680) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2681) 	There are also various legacy SMB/CIFS requests used as is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2682) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2683) 	From existing Lanman and NTLM dialects:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2684) 	--------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2685) 	NEGOTIATE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2686) 	SESSION_SETUP_ANDX (BB which?)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2687) 	TREE_CONNECT_ANDX (BB which wct?)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2688) 	TREE_DISCONNECT (BB add volume timestamp on response)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2689) 	LOGOFF_ANDX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2690) 	DELETE (note delete open file behavior)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2691) 	DELETE_DIRECTORY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2692) 	READ_AND_X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2693) 	WRITE_AND_X
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2694) 	LOCKING_AND_X (note posix lock semantics)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2695) 	RENAME (note rename across dirs and open file rename posix behaviors)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2696) 	NT_RENAME (for hardlinks) Is this good enough for all features?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2697) 	FIND_CLOSE2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2698) 	TRANSACTION2 (18 cases)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2699) 		SMB_SET_FILE_END_OF_FILE_INFO2 SMB_SET_PATH_END_OF_FILE_INFO2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2700) 		(BB verify that never need to set allocation size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2701) 		SMB_SET_FILE_BASIC_INFO2 (setting times - BB can it be done via
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2702) 			 Unix ext?)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2703) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2704) 	COPY (note support for copy across directories) - FUTURE, OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2705) 	setting/getting OS/2 EAs - FUTURE (BB can this handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2706) 	setting Linux xattrs perfectly)         - OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2707) 	dnotify                                 - FUTURE, OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2708) 	quota                                   - FUTURE, OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2709) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2710) 	Note that various requests implemented for NT interop such as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2711) 		NT_TRANSACT (IOCTL) QueryReparseInfo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2712) 	are unneeded to servers compliant with the CIFS POSIX extensions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2713) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2714) 	From CIFS Unix Extensions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2715) 	-------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2716) 	T2 SET_PATH_INFO (SMB_SET_FILE_UNIX_LINK) for symlinks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2717) 	T2 SET_PATH_INFO (SMB_SET_FILE_BASIC_INFO2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2718) 	T2 QUERY_PATH_INFO (SMB_QUERY_FILE_UNIX_LINK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2719) 	T2 QUERY_PATH_INFO (SMB_QUERY_FILE_UNIX_BASIC)	BB check for missing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2720) 							inode fields
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2721) 				Actually a need QUERY_FILE_UNIX_INFO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2722) 				since has inode num
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2723) 				BB what about a) blksize/blkbits/blocks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2724) 							  b) i_version
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2725) 							  c) i_rdev
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2726) 							  d) notify mask?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2727) 							  e) generation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2728) 							  f) size_seqcount
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2729) 	T2 FIND_FIRST/FIND_NEXT FIND_FILE_UNIX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2730) 	TRANS2_GET_DFS_REFERRAL		      - OPTIONAL but recommended
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2731) 	T2_QFS_INFO QueryDevice/AttributeInfo - OPTIONAL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2732)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2733) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2734) /* xsymlink is a symlink format (used by MacOS) that can be used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2735)    to save symlink info in a regular file when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2736)    mounted to operating systems that do not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2737)    support the cifs Unix extensions or EAs (for xattr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2738)    based symlinks).  For such a file to be recognized
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2739)    as containing symlink data:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2740) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2741)    1) file size must be 1067,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2742)    2) signature must begin file data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2743)    3) length field must be set to ASCII representation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2744) 	of a number which is less than or equal to 1024,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2745)    4) md5 must match that of the path data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2746) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2747) struct xsymlink {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2748) 	/* 1067 bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2749) 	char signature[4]; /* XSym */ /* not null terminated */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2750) 	char cr0;         /* \n */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2751) /* ASCII representation of length (4 bytes decimal) terminated by \n not null */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2752) 	char length[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2753) 	char cr1;         /* \n */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2754) /* md5 of valid subset of path ie path[0] through path[length-1] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2755) 	__u8 md5[32];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2756) 	char cr2;        /* \n */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2757) /* if room left, then end with \n then 0x20s by convention but not required */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2758) 	char path[1024];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2759) } __attribute__((packed));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2760) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2761) typedef struct file_xattr_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2762) 	/* BB do we need another field for flags? BB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2763) 	__u32 xattr_name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2764) 	__u32 xattr_value_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2765) 	char  xattr_name[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2766) 	/* followed by xattr_value[xattr_value_len], no pad */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2767) } __attribute__((packed)) FILE_XATTR_INFO; /* extended attribute info
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2768) 					      level 0x205 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2769) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2770) /* flags for lsattr and chflags commands removed arein uapi/linux/fs.h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2771) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2772) typedef struct file_chattr_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2773) 	__le64	mask; /* list of all possible attribute bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2774) 	__le64	mode; /* list of actual attribute bits on this inode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2775) } __attribute__((packed)) FILE_CHATTR_INFO;  /* ext attributes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2776) 						(chattr, chflags) level 0x206 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2777) #endif 				/* POSIX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2778) #endif				/* _CIFSPDU_H */