@@ -115,120 +115,6 @@ struct share_redirect_error_context_rsp {
115
115
/* __u8 ResourceName[] */ /* Name of share as counted Unicode string */
116
116
} __packed ;
117
117
118
- /* File Attrubutes */
119
- #define FILE_ATTRIBUTE_READONLY 0x00000001
120
- #define FILE_ATTRIBUTE_HIDDEN 0x00000002
121
- #define FILE_ATTRIBUTE_SYSTEM 0x00000004
122
- #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
123
- #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
124
- #define FILE_ATTRIBUTE_NORMAL 0x00000080
125
- #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
126
- #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
127
- #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
128
- #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
129
- #define FILE_ATTRIBUTE_OFFLINE 0x00001000
130
- #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
131
- #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
132
- #define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
133
- #define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000
134
-
135
- /* Oplock levels */
136
- #define SMB2_OPLOCK_LEVEL_NONE 0x00
137
- #define SMB2_OPLOCK_LEVEL_II 0x01
138
- #define SMB2_OPLOCK_LEVEL_EXCLUSIVE 0x08
139
- #define SMB2_OPLOCK_LEVEL_BATCH 0x09
140
- #define SMB2_OPLOCK_LEVEL_LEASE 0xFF
141
- /* Non-spec internal type */
142
- #define SMB2_OPLOCK_LEVEL_NOCHANGE 0x99
143
-
144
- /* Desired Access Flags */
145
- #define FILE_READ_DATA_LE cpu_to_le32(0x00000001)
146
- #define FILE_WRITE_DATA_LE cpu_to_le32(0x00000002)
147
- #define FILE_APPEND_DATA_LE cpu_to_le32(0x00000004)
148
- #define FILE_READ_EA_LE cpu_to_le32(0x00000008)
149
- #define FILE_WRITE_EA_LE cpu_to_le32(0x00000010)
150
- #define FILE_EXECUTE_LE cpu_to_le32(0x00000020)
151
- #define FILE_READ_ATTRIBUTES_LE cpu_to_le32(0x00000080)
152
- #define FILE_WRITE_ATTRIBUTES_LE cpu_to_le32(0x00000100)
153
- #define FILE_DELETE_LE cpu_to_le32(0x00010000)
154
- #define FILE_READ_CONTROL_LE cpu_to_le32(0x00020000)
155
- #define FILE_WRITE_DAC_LE cpu_to_le32(0x00040000)
156
- #define FILE_WRITE_OWNER_LE cpu_to_le32(0x00080000)
157
- #define FILE_SYNCHRONIZE_LE cpu_to_le32(0x00100000)
158
- #define FILE_ACCESS_SYSTEM_SECURITY_LE cpu_to_le32(0x01000000)
159
- #define FILE_MAXIMAL_ACCESS_LE cpu_to_le32(0x02000000)
160
- #define FILE_GENERIC_ALL_LE cpu_to_le32(0x10000000)
161
- #define FILE_GENERIC_EXECUTE_LE cpu_to_le32(0x20000000)
162
- #define FILE_GENERIC_WRITE_LE cpu_to_le32(0x40000000)
163
- #define FILE_GENERIC_READ_LE cpu_to_le32(0x80000000)
164
-
165
- /* ShareAccess Flags */
166
- #define FILE_SHARE_READ_LE cpu_to_le32(0x00000001)
167
- #define FILE_SHARE_WRITE_LE cpu_to_le32(0x00000002)
168
- #define FILE_SHARE_DELETE_LE cpu_to_le32(0x00000004)
169
- #define FILE_SHARE_ALL_LE cpu_to_le32(0x00000007)
170
-
171
- /* CreateDisposition Flags */
172
- #define FILE_SUPERSEDE_LE cpu_to_le32(0x00000000)
173
- #define FILE_OPEN_LE cpu_to_le32(0x00000001)
174
- #define FILE_CREATE_LE cpu_to_le32(0x00000002)
175
- #define FILE_OPEN_IF_LE cpu_to_le32(0x00000003)
176
- #define FILE_OVERWRITE_LE cpu_to_le32(0x00000004)
177
- #define FILE_OVERWRITE_IF_LE cpu_to_le32(0x00000005)
178
-
179
- /* CreateOptions Flags */
180
- #define FILE_DIRECTORY_FILE_LE cpu_to_le32(0x00000001)
181
- /* same as #define CREATE_NOT_FILE_LE cpu_to_le32(0x00000001) */
182
- #define FILE_WRITE_THROUGH_LE cpu_to_le32(0x00000002)
183
- #define FILE_SEQUENTIAL_ONLY_LE cpu_to_le32(0x00000004)
184
- #define FILE_NO_INTERMEDIATE_BUFFERRING_LE cpu_to_le32(0x00000008)
185
- #define FILE_SYNCHRONOUS_IO_ALERT_LE cpu_to_le32(0x00000010)
186
- #define FILE_SYNCHRONOUS_IO_NON_ALERT_LE cpu_to_le32(0x00000020)
187
- #define FILE_NON_DIRECTORY_FILE_LE cpu_to_le32(0x00000040)
188
- #define FILE_COMPLETE_IF_OPLOCKED_LE cpu_to_le32(0x00000100)
189
- #define FILE_NO_EA_KNOWLEDGE_LE cpu_to_le32(0x00000200)
190
- #define FILE_RANDOM_ACCESS_LE cpu_to_le32(0x00000800)
191
- #define FILE_DELETE_ON_CLOSE_LE cpu_to_le32(0x00001000)
192
- #define FILE_OPEN_BY_FILE_ID_LE cpu_to_le32(0x00002000)
193
- #define FILE_OPEN_FOR_BACKUP_INTENT_LE cpu_to_le32(0x00004000)
194
- #define FILE_NO_COMPRESSION_LE cpu_to_le32(0x00008000)
195
- #define FILE_RESERVE_OPFILTER_LE cpu_to_le32(0x00100000)
196
- #define FILE_OPEN_REPARSE_POINT_LE cpu_to_le32(0x00200000)
197
- #define FILE_OPEN_NO_RECALL_LE cpu_to_le32(0x00400000)
198
- #define FILE_OPEN_FOR_FREE_SPACE_QUERY_LE cpu_to_le32(0x00800000)
199
-
200
- #define FILE_READ_RIGHTS_LE (FILE_READ_DATA_LE | FILE_READ_EA_LE \
201
- | FILE_READ_ATTRIBUTES_LE)
202
- #define FILE_WRITE_RIGHTS_LE (FILE_WRITE_DATA_LE | FILE_APPEND_DATA_LE \
203
- | FILE_WRITE_EA_LE | FILE_WRITE_ATTRIBUTES_LE)
204
- #define FILE_EXEC_RIGHTS_LE (FILE_EXECUTE_LE)
205
-
206
- /* Impersonation Levels. See MS-WPO section 9.7 and MSDN-IMPERS */
207
- #define IL_ANONYMOUS cpu_to_le32(0x00000000)
208
- #define IL_IDENTIFICATION cpu_to_le32(0x00000001)
209
- #define IL_IMPERSONATION cpu_to_le32(0x00000002)
210
- #define IL_DELEGATE cpu_to_le32(0x00000003)
211
-
212
- /* Create Context Values */
213
- #define SMB2_CREATE_EA_BUFFER "ExtA" /* extended attributes */
214
- #define SMB2_CREATE_SD_BUFFER "SecD" /* security descriptor */
215
- #define SMB2_CREATE_DURABLE_HANDLE_REQUEST "DHnQ"
216
- #define SMB2_CREATE_DURABLE_HANDLE_RECONNECT "DHnC"
217
- #define SMB2_CREATE_ALLOCATION_SIZE "AISi"
218
- #define SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST "MxAc"
219
- #define SMB2_CREATE_TIMEWARP_REQUEST "TWrp"
220
- #define SMB2_CREATE_QUERY_ON_DISK_ID "QFid"
221
- #define SMB2_CREATE_REQUEST_LEASE "RqLs"
222
- #define SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 "DH2Q"
223
- #define SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 "DH2C"
224
- #define SMB2_CREATE_APP_INSTANCE_ID 0x45BCA66AEFA7F74A9008FA462E144D74
225
- #define SMB2_CREATE_APP_INSTANCE_VERSION 0xB982D0B73B56074FA07B524A8116A010
226
- #define SVHDX_OPEN_DEVICE_CONTEX 0x9CCBCF9E04C1E643980E158DA1F6EC83
227
- #define SMB2_CREATE_TAG_POSIX 0x93AD25509CB411E7B42383DE968BCD7C
228
-
229
- /* Flag (SMB3 open response) values */
230
- #define SMB2_CREATE_FLAG_REPARSEPOINT 0x01
231
-
232
118
/*
233
119
* Maximum number of iovs we need for an open/create request.
234
120
* [0] : struct smb2_create_req
@@ -242,64 +128,13 @@ struct share_redirect_error_context_rsp {
242
128
*/
243
129
#define SMB2_CREATE_IOV_SIZE 8
244
130
245
- struct smb2_create_req {
246
- struct smb2_hdr hdr ;
247
- __le16 StructureSize ; /* Must be 57 */
248
- __u8 SecurityFlags ;
249
- __u8 RequestedOplockLevel ;
250
- __le32 ImpersonationLevel ;
251
- __le64 SmbCreateFlags ;
252
- __le64 Reserved ;
253
- __le32 DesiredAccess ;
254
- __le32 FileAttributes ;
255
- __le32 ShareAccess ;
256
- __le32 CreateDisposition ;
257
- __le32 CreateOptions ;
258
- __le16 NameOffset ;
259
- __le16 NameLength ;
260
- __le32 CreateContextsOffset ;
261
- __le32 CreateContextsLength ;
262
- __u8 Buffer [];
263
- } __packed ;
264
-
265
131
/*
266
132
* Maximum size of a SMB2_CREATE response is 64 (smb2 header) +
267
133
* 88 (fixed part of create response) + 520 (path) + 208 (contexts) +
268
134
* 2 bytes of padding.
269
135
*/
270
136
#define MAX_SMB2_CREATE_RESPONSE_SIZE 880
271
137
272
- struct smb2_create_rsp {
273
- struct smb2_hdr hdr ;
274
- __le16 StructureSize ; /* Must be 89 */
275
- __u8 OplockLevel ;
276
- __u8 Flag ; /* 0x01 if reparse point */
277
- __le32 CreateAction ;
278
- __le64 CreationTime ;
279
- __le64 LastAccessTime ;
280
- __le64 LastWriteTime ;
281
- __le64 ChangeTime ;
282
- __le64 AllocationSize ;
283
- __le64 EndofFile ;
284
- __le32 FileAttributes ;
285
- __le32 Reserved2 ;
286
- __u64 PersistentFileId ; /* opaque endianness */
287
- __u64 VolatileFileId ; /* opaque endianness */
288
- __le32 CreateContextsOffset ;
289
- __le32 CreateContextsLength ;
290
- __u8 Buffer [1 ];
291
- } __packed ;
292
-
293
- struct create_context {
294
- __le32 Next ;
295
- __le16 NameOffset ;
296
- __le16 NameLength ;
297
- __le16 Reserved ;
298
- __le16 DataOffset ;
299
- __le32 DataLength ;
300
- __u8 Buffer [];
301
- } __packed ;
302
-
303
138
#define SMB2_LEASE_READ_CACHING_HE 0x01
304
139
#define SMB2_LEASE_HANDLE_CACHING_HE 0x02
305
140
#define SMB2_LEASE_WRITE_CACHING_HE 0x04
0 commit comments