^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 */