2
Unix SMB/CIFS implementation.
3
SMB torture tester - deny mode scanning functions
4
Copyright (C) Andrew Tridgell 2001
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 3 of the License, or
9
(at your option) any later version.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program. If not, see <http://www.gnu.org/licenses/>.
21
#include "torture/torture.h"
22
#include "system/filesys.h"
23
#include "libcli/raw/libcliraw.h"
24
#include "libcli/libcli.h"
25
#include "torture/util.h"
27
extern int torture_failures;
29
#define CHECK_MAX_FAILURES(label) do { if (++failures >= torture_failures) goto label; } while (0)
31
enum deny_result {A_0=0, A_X=1, A_R=2, A_W=3, A_RW=5};
33
static const char *denystr(int denymode)
39
{DENY_DOS, "DENY_DOS"},
40
{DENY_ALL, "DENY_ALL"},
41
{DENY_WRITE, "DENY_WRITE"},
42
{DENY_READ, "DENY_READ"},
43
{DENY_NONE, "DENY_NONE"},
44
{DENY_FCB, "DENY_FCB"},
47
for (i=0;deny_modes[i].name;i++) {
48
if (deny_modes[i].v == denymode) return deny_modes[i].name;
53
static const char *openstr(int mode)
60
{O_RDONLY, "O_RDONLY"},
61
{O_WRONLY, "O_WRONLY"},
64
for (i=0;open_modes[i].name;i++) {
65
if (open_modes[i].v == mode) return open_modes[i].name;
70
static const char *resultstr(enum deny_result res)
82
for (i=0;ARRAY_SIZE(results);i++) {
83
if (results[i].res == res) return results[i].name;
92
enum deny_result result;
94
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
95
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
96
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
97
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0},
98
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
99
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
100
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
101
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
102
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
103
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0},
104
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0},
105
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0},
106
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_RW},
107
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
108
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_W},
109
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_0},
110
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
111
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
112
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
113
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
114
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
115
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
116
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
117
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
118
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_RW},
119
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R},
120
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_W},
121
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0},
122
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0},
123
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0},
124
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW},
125
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
126
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W},
127
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0},
128
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
129
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
130
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
131
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
132
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
133
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
134
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
135
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
136
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
137
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
138
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
139
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_RW},
140
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_R},
141
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_W},
142
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW},
143
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
144
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W},
145
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0},
146
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
147
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
148
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0},
149
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
150
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
151
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0},
152
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
153
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
154
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
155
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
156
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
157
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0},
158
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0},
159
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0},
160
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0},
161
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
162
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
163
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0},
164
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
165
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
166
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
167
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
168
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
169
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
170
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
171
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
172
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
173
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
174
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
175
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
176
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
177
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
178
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
179
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
180
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
181
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
182
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
183
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
184
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
185
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
186
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
187
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
188
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
189
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
190
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
191
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
192
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
193
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
194
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
195
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
196
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
197
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
198
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
199
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
200
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
201
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
202
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
203
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
204
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
205
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
206
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
207
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
208
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
209
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
210
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
211
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0},
212
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
213
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
214
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
215
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
216
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
217
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
218
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
219
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
220
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
221
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
222
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
223
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
224
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
225
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
226
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
227
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R},
228
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
229
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
230
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
231
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
232
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
233
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
234
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
235
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
236
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
237
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
238
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
239
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
240
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
241
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
242
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
243
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
244
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
245
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
246
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
247
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
248
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R},
249
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
250
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
251
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
252
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
253
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
254
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
255
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
256
{1, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0},
257
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0},
258
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_W},
259
{1, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0},
260
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0},
261
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0},
262
{1, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0},
263
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
264
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
265
{1, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0},
266
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0},
267
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0},
268
{1, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0},
269
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0},
270
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W},
271
{1, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0},
272
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0},
273
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0},
274
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
275
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
276
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W},
277
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
278
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
279
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
280
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
281
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
282
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W},
283
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
284
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
285
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0},
286
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
287
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
288
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
289
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
290
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
291
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
292
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
293
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
294
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W},
295
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
296
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
297
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
298
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
299
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
300
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
301
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
302
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
303
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W},
304
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
305
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
306
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
307
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
308
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
309
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
310
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_RW},
311
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
312
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_W},
313
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0},
314
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
315
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
316
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
317
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
318
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
319
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0},
320
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0},
321
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0},
322
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
323
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
324
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
325
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0},
326
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
327
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
328
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW},
329
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
330
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W},
331
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
332
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
333
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
334
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW},
335
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R},
336
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W},
337
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0},
338
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0},
339
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0},
340
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
341
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
342
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
343
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
344
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
345
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
346
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW},
347
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
348
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W},
349
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
350
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
351
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
352
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
353
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
354
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
355
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW},
356
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R},
357
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W},
358
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
359
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
360
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
361
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
362
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
363
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
364
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_0},
365
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_0},
366
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_0},
367
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0},
368
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
369
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
370
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
371
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
372
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
373
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0},
374
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0},
375
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0},
376
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0},
377
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
378
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
379
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_0},
380
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_0},
381
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_0},
382
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0},
383
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0},
384
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0},
385
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
386
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
387
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
388
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
389
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
390
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
391
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
392
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
393
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
394
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
395
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
396
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
397
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0},
398
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0},
399
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0},
400
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0},
401
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0},
402
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0},
403
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
404
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
405
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
406
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
407
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
408
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
409
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
410
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
411
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
412
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
413
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
414
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
415
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0},
416
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0},
417
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0},
418
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_0},
419
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_0},
420
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_0},
421
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0},
422
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
423
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
424
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
425
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
426
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
427
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0},
428
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0},
429
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0},
430
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_0},
431
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_0},
432
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_0},
433
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_0},
434
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
435
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
436
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_0},
437
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
438
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_0},
439
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
440
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
441
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
442
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
443
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R},
444
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
445
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0},
446
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0},
447
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0},
448
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0},
449
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
450
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0},
451
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0},
452
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
453
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
454
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_0},
455
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_0},
456
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_0},
457
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
458
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
459
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
460
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
461
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
462
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
463
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_0},
464
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0},
465
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0},
466
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0},
467
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_0},
468
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0},
469
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0},
470
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
471
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
472
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0},
473
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
474
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
475
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0},
476
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
477
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
478
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
479
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
480
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
481
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0},
482
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0},
483
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0},
484
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0},
485
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
486
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
487
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0},
488
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
489
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
490
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
491
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
492
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
493
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
494
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
495
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
496
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
497
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
498
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
499
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
500
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
501
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
502
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
503
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
504
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
505
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
506
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
507
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
508
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
509
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
510
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
511
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
512
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
513
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
514
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
515
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
516
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
517
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
518
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
519
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
520
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
521
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
522
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
523
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
524
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
525
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
526
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
527
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_0},
528
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
529
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
530
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
531
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
532
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
533
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
534
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
535
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0},
536
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
537
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
538
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
539
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
540
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
541
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
542
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
543
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
544
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
545
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
546
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
547
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
548
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
549
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
550
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
551
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R},
552
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
553
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
554
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
555
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
556
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
557
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
558
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
559
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
560
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
561
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
562
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
563
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_0},
564
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
565
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
566
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
567
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
568
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
569
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
570
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
571
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
572
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R},
573
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
574
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
575
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
576
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
577
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
578
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
579
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
580
{0, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0},
581
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0},
582
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_0},
583
{0, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0},
584
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0},
585
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0},
586
{0, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0},
587
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
588
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
589
{0, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0},
590
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0},
591
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0},
592
{0, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0},
593
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0},
594
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W},
595
{0, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0},
596
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0},
597
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0},
598
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
599
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
600
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0},
601
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
602
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
603
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
604
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
605
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
606
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W},
607
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
608
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
609
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0},
610
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
611
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
612
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
613
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
614
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
615
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
616
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
617
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
618
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0},
619
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
620
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
621
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
622
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
623
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
624
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
625
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
626
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
627
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W},
628
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
629
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
630
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
631
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
632
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
633
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
634
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_0},
635
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_0},
636
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_0},
637
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0},
638
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
639
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
640
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
641
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
642
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
643
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0},
644
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0},
645
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0},
646
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
647
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
648
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
649
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0},
650
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
651
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
652
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0},
653
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
654
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0},
655
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
656
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
657
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
658
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW},
659
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R},
660
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W},
661
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0},
662
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0},
663
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0},
664
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
665
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
666
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
667
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
668
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
669
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
670
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0},
671
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_0},
672
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0},
673
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
674
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
675
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
676
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
677
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
678
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
679
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW},
680
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R},
681
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W},
682
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
683
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
684
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
685
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
686
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
687
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
688
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_0},
689
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_0},
690
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_0},
691
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0},
692
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
693
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
694
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
695
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
696
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
697
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0},
698
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0},
699
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0},
700
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0},
701
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
702
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
703
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_0},
704
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_0},
705
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_0},
706
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0},
707
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0},
708
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0},
709
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
710
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
711
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
712
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
713
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
714
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
715
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
716
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
717
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
718
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
719
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
720
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
721
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0},
722
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0},
723
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0},
724
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0},
725
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0},
726
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0},
727
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
728
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
729
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
730
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
731
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
732
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
733
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
734
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
735
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
736
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
737
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
738
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
739
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0},
740
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0},
741
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0}
745
static const struct {
749
enum deny_result result;
751
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
752
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
753
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
754
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0},
755
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
756
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
757
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
758
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
759
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
760
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0},
761
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0},
762
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0},
763
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_RW},
764
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
765
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_W},
766
{1, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_0},
767
{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
768
{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
769
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
770
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
771
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
772
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
773
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
774
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
775
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_RW},
776
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R},
777
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_W},
778
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0},
779
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0},
780
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0},
781
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW},
782
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
783
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W},
784
{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0},
785
{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
786
{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
787
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
788
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
789
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
790
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
791
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
792
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
793
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
794
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
795
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
796
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_RW},
797
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_R},
798
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_W},
799
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW},
800
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
801
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W},
802
{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0},
803
{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
804
{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
805
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0},
806
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
807
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
808
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0},
809
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
810
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
811
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
812
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
813
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
814
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0},
815
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0},
816
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0},
817
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0},
818
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
819
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
820
{1, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0},
821
{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
822
{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
823
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
824
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
825
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
826
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
827
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
828
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
829
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
830
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
831
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
832
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
833
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
834
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
835
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
836
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
837
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
838
{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
839
{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
840
{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
841
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
842
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
843
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
844
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
845
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
846
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
847
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
848
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
849
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
850
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
851
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
852
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
853
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
854
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
855
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
856
{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
857
{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
858
{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
859
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
860
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
861
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
862
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
863
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
864
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
865
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
866
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
867
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
868
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0},
869
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
870
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
871
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
872
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
873
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
874
{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
875
{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
876
{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
877
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
878
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
879
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
880
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
881
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
882
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
883
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
884
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R},
885
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
886
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
887
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
888
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
889
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
890
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
891
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
892
{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
893
{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
894
{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
895
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
896
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
897
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
898
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
899
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
900
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
901
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
902
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
903
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
904
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
905
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R},
906
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
907
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
908
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
909
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
910
{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
911
{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
912
{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
913
{1, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0},
914
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0},
915
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_W},
916
{1, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0},
917
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0},
918
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0},
919
{1, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0},
920
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
921
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
922
{1, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0},
923
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0},
924
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0},
925
{1, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0},
926
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0},
927
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W},
928
{1, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0},
929
{1, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0},
930
{1, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0},
931
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
932
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
933
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W},
934
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
935
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
936
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
937
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
938
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
939
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W},
940
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
941
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
942
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0},
943
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
944
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
945
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
946
{1, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
947
{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
948
{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
949
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
950
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
951
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W},
952
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
953
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
954
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
955
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
956
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
957
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
958
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
959
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
960
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W},
961
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
962
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
963
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
964
{1, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
965
{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
966
{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
967
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_RW},
968
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
969
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_W},
970
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0},
971
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
972
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
973
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
974
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
975
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
976
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0},
977
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0},
978
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0},
979
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
980
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
981
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
982
{1, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0},
983
{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
984
{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
985
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW},
986
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
987
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W},
988
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
989
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
990
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
991
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW},
992
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R},
993
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W},
994
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0},
995
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0},
996
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0},
997
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
998
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
999
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
1000
{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
1001
{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
1002
{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
1003
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW},
1004
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
1005
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W},
1006
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
1007
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
1008
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
1009
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
1010
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
1011
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
1012
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW},
1013
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R},
1014
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W},
1015
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
1016
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
1017
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
1018
{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
1019
{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
1020
{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
1021
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_RW},
1022
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_R},
1023
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_W},
1024
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0},
1025
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
1026
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
1027
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
1028
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
1029
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
1030
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0},
1031
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0},
1032
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0},
1033
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0},
1034
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
1035
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
1036
{1, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_RW},
1037
{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_RW},
1038
{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_RW},
1039
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW},
1040
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R},
1041
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W},
1042
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
1043
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
1044
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
1045
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
1046
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
1047
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
1048
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
1049
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
1050
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
1051
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
1052
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
1053
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
1054
{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW},
1055
{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW},
1056
{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW},
1057
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW},
1058
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R},
1059
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W},
1060
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
1061
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
1062
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
1063
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
1064
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
1065
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
1066
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
1067
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
1068
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
1069
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
1070
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
1071
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
1072
{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW},
1073
{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW},
1074
{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW},
1075
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
1076
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
1077
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
1078
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0},
1079
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
1080
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
1081
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
1082
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
1083
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
1084
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0},
1085
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0},
1086
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0},
1087
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_0},
1088
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_0},
1089
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_0},
1090
{0, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_RW},
1091
{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_RW},
1092
{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_RW},
1093
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_0},
1094
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
1095
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_0},
1096
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
1097
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
1098
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
1099
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
1100
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R},
1101
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
1102
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0},
1103
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0},
1104
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0},
1105
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0},
1106
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R},
1107
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0},
1108
{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0},
1109
{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0},
1110
{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0},
1111
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW},
1112
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R},
1113
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W},
1114
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0},
1115
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0},
1116
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0},
1117
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0},
1118
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0},
1119
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0},
1120
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_0},
1121
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0},
1122
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0},
1123
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0},
1124
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_0},
1125
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0},
1126
{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_RW},
1127
{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_RW},
1128
{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_RW},
1129
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0},
1130
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
1131
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
1132
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0},
1133
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
1134
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
1135
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
1136
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
1137
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
1138
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0},
1139
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0},
1140
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0},
1141
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0},
1142
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
1143
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
1144
{0, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0},
1145
{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
1146
{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
1147
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
1148
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
1149
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
1150
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
1151
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
1152
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
1153
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
1154
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
1155
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
1156
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
1157
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
1158
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
1159
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
1160
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
1161
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
1162
{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
1163
{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
1164
{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
1165
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0},
1166
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0},
1167
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0},
1168
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0},
1169
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0},
1170
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0},
1171
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0},
1172
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0},
1173
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0},
1174
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0},
1175
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0},
1176
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0},
1177
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0},
1178
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0},
1179
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0},
1180
{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0},
1181
{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0},
1182
{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0},
1183
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
1184
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_0},
1185
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
1186
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
1187
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
1188
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
1189
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
1190
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
1191
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
1192
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0},
1193
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
1194
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
1195
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
1196
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
1197
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
1198
{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
1199
{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
1200
{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
1201
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
1202
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R},
1203
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
1204
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
1205
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
1206
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
1207
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
1208
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R},
1209
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
1210
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
1211
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0},
1212
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
1213
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
1214
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
1215
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
1216
{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
1217
{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
1218
{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
1219
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0},
1220
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_0},
1221
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0},
1222
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0},
1223
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0},
1224
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0},
1225
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0},
1226
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0},
1227
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0},
1228
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0},
1229
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R},
1230
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0},
1231
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0},
1232
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R},
1233
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0},
1234
{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0},
1235
{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0},
1236
{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0},
1237
{0, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0},
1238
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0},
1239
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_0},
1240
{0, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0},
1241
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0},
1242
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0},
1243
{0, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0},
1244
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
1245
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
1246
{0, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0},
1247
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0},
1248
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0},
1249
{0, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0},
1250
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0},
1251
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W},
1252
{0, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0},
1253
{0, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0},
1254
{0, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0},
1255
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
1256
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
1257
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0},
1258
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
1259
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
1260
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
1261
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
1262
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
1263
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W},
1264
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
1265
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
1266
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0},
1267
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
1268
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
1269
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
1270
{0, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
1271
{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
1272
{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
1273
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0},
1274
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0},
1275
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0},
1276
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0},
1277
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0},
1278
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0},
1279
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0},
1280
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0},
1281
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0},
1282
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0},
1283
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0},
1284
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W},
1285
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0},
1286
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0},
1287
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W},
1288
{0, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0},
1289
{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0},
1290
{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0},
1291
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_0},
1292
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_0},
1293
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_0},
1294
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0},
1295
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
1296
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
1297
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
1298
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
1299
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
1300
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0},
1301
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0},
1302
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0},
1303
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
1304
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
1305
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
1306
{0, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0},
1307
{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
1308
{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
1309
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0},
1310
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R},
1311
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0},
1312
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
1313
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
1314
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
1315
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW},
1316
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R},
1317
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W},
1318
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0},
1319
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0},
1320
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0},
1321
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
1322
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
1323
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
1324
{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
1325
{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
1326
{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
1327
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0},
1328
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_0},
1329
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0},
1330
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0},
1331
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0},
1332
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0},
1333
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0},
1334
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0},
1335
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0},
1336
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW},
1337
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R},
1338
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W},
1339
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW},
1340
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R},
1341
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W},
1342
{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0},
1343
{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0},
1344
{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0},
1345
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_RW},
1346
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_R},
1347
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_W},
1348
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0},
1349
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
1350
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
1351
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
1352
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
1353
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
1354
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0},
1355
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0},
1356
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0},
1357
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0},
1358
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
1359
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
1360
{0, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_RW},
1361
{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_RW},
1362
{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_RW},
1363
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW},
1364
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R},
1365
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W},
1366
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
1367
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
1368
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
1369
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
1370
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
1371
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
1372
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
1373
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
1374
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
1375
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
1376
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
1377
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
1378
{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW},
1379
{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW},
1380
{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW},
1381
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW},
1382
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R},
1383
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W},
1384
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0},
1385
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0},
1386
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0},
1387
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0},
1388
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0},
1389
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0},
1390
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0},
1391
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0},
1392
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0},
1393
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0},
1394
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0},
1395
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0},
1396
{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW},
1397
{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW},
1398
{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW}
1402
static void progress_bar(struct torture_context *tctx, uint_t i, uint_t total)
1404
if (torture_setting_bool(tctx, "progress", true)) {
1405
torture_comment(tctx, "%5d/%5d\r", i, total);
1411
this produces a matrix of deny mode behaviour for 1 connection
1413
bool torture_denytest1(struct torture_context *tctx,
1414
struct smbcli_state *cli1)
1418
bool correct = true;
1419
struct timeval tv, tv_start;
1420
const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"};
1423
torture_comment(tctx, "Testing deny modes with 1 connection\n");
1426
smbcli_unlink(cli1->tree, fnames[i]);
1427
fnum1 = smbcli_open(cli1->tree, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
1428
smbcli_write(cli1->tree, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
1429
smbcli_close(cli1->tree, fnum1);
1432
torture_comment(tctx, "testing %d entries\n", (int)ARRAY_SIZE(denytable1));
1434
GetTimeOfDay(&tv_start);
1436
for (i=0; i<ARRAY_SIZE(denytable1); i++) {
1437
enum deny_result res;
1438
const char *fname = fnames[denytable1[i].isexe];
1440
progress_bar(tctx, i, ARRAY_SIZE(denytable1));
1442
fnum1 = smbcli_open(cli1->tree, fname,
1443
denytable1[i].mode1,
1444
denytable1[i].deny1);
1445
fnum2 = smbcli_open(cli1->tree, fname,
1446
denytable1[i].mode2,
1447
denytable1[i].deny2);
1451
} else if (fnum2 == -1) {
1456
if (smbcli_read(cli1->tree, fnum2, &x, 0, 1) == 1) {
1459
if (smbcli_write(cli1->tree, fnum2, 0, &x, 0, 1) == 1) {
1464
if (torture_setting_bool(tctx, "showall", false) ||
1465
res != denytable1[i].result) {
1468
tdif = usec_time_diff(&tv, &tv_start);
1470
torture_comment(tctx, "%lld: %s %8s %10s %8s %10s %s (correct=%s)\n",
1473
denystr(denytable1[i].deny1),
1474
openstr(denytable1[i].mode1),
1475
denystr(denytable1[i].deny2),
1476
openstr(denytable1[i].mode2),
1478
resultstr(denytable1[i].result));
1481
if (res != denytable1[i].result) {
1483
CHECK_MAX_FAILURES(failed);
1486
smbcli_close(cli1->tree, fnum1);
1487
smbcli_close(cli1->tree, fnum2);
1492
smbcli_unlink(cli1->tree, fnames[i]);
1495
torture_comment(tctx, "finshed denytest1 (%d failures)\n", failures);
1501
this produces a matrix of deny mode behaviour with 2 connections
1503
bool torture_denytest2(struct torture_context *tctx,
1504
struct smbcli_state *cli1,
1505
struct smbcli_state *cli2)
1509
bool correct = true;
1510
const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
1511
struct timeval tv, tv_start;
1515
smbcli_unlink(cli1->tree, fnames[i]);
1516
fnum1 = smbcli_open(cli1->tree, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
1517
smbcli_write(cli1->tree, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
1518
smbcli_close(cli1->tree, fnum1);
1521
GetTimeOfDay(&tv_start);
1523
for (i=0; i<ARRAY_SIZE(denytable2); i++) {
1524
enum deny_result res;
1525
const char *fname = fnames[denytable2[i].isexe];
1527
progress_bar(tctx, i, ARRAY_SIZE(denytable1));
1529
fnum1 = smbcli_open(cli1->tree, fname,
1530
denytable2[i].mode1,
1531
denytable2[i].deny1);
1532
fnum2 = smbcli_open(cli2->tree, fname,
1533
denytable2[i].mode2,
1534
denytable2[i].deny2);
1538
} else if (fnum2 == -1) {
1543
if (smbcli_read(cli2->tree, fnum2, &x, 0, 1) == 1) {
1546
if (smbcli_write(cli2->tree, fnum2, 0, &x, 0, 1) == 1) {
1551
if (torture_setting_bool(tctx, "showall", false) ||
1552
res != denytable2[i].result) {
1555
tdif = usec_time_diff(&tv, &tv_start);
1557
torture_comment(tctx, "%lld: %s %8s %10s %8s %10s %s (correct=%s)\n",
1560
denystr(denytable2[i].deny1),
1561
openstr(denytable2[i].mode1),
1562
denystr(denytable2[i].deny2),
1563
openstr(denytable2[i].mode2),
1565
resultstr(denytable2[i].result));
1568
if (res != denytable2[i].result) {
1570
CHECK_MAX_FAILURES(failed);
1573
smbcli_close(cli1->tree, fnum1);
1574
smbcli_close(cli2->tree, fnum2);
1579
smbcli_unlink(cli1->tree, fnames[i]);
1582
torture_comment(tctx, "finshed denytest2 (%d failures)\n", failures);
1589
simple test harness for playing with deny modes
1591
bool torture_denytest3(struct torture_context *tctx,
1592
struct smbcli_state *cli1,
1593
struct smbcli_state *cli2)
1598
fname = "\\deny_dos1.dat";
1600
smbcli_unlink(cli1->tree, fname);
1601
fnum1 = smbcli_open(cli1->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1602
fnum2 = smbcli_open(cli1->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1603
if (fnum1 != -1) smbcli_close(cli1->tree, fnum1);
1604
if (fnum2 != -1) smbcli_close(cli1->tree, fnum2);
1605
smbcli_unlink(cli1->tree, fname);
1606
torture_comment(tctx, "fnum1=%d fnum2=%d\n", fnum1, fnum2);
1609
fname = "\\deny_dos2.dat";
1611
smbcli_unlink(cli1->tree, fname);
1612
fnum1 = smbcli_open(cli1->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1613
fnum2 = smbcli_open(cli2->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1614
if (fnum1 != -1) smbcli_close(cli1->tree, fnum1);
1615
if (fnum2 != -1) smbcli_close(cli2->tree, fnum2);
1616
smbcli_unlink(cli1->tree, fname);
1617
torture_comment(tctx, "fnum1=%d fnum2=%d\n", fnum1, fnum2);
1627
static uint32_t map_bits(const struct bit_value *bv, int b, int nbits)
1631
for (i=0;i<nbits;i++) {
1639
static const char *bit_string(TALLOC_CTX *mem_ctx, const struct bit_value *bv, int b, int nbits)
1643
for (i=0;i<nbits;i++) {
1646
ret = talloc_asprintf(mem_ctx, "%s", bv[i].name);
1648
ret = talloc_asprintf_append_buffer(ret, " | %s", bv[i].name);
1652
if (ret == NULL) ret = talloc_strdup(mem_ctx, "(NONE)");
1658
determine if two opens conflict
1660
static NTSTATUS predict_share_conflict(uint32_t sa1, uint32_t am1, uint32_t sa2, uint32_t am2,
1661
bool read_for_execute, enum deny_result *res)
1663
#define CHECK_MASK(am, sa, right, share) do { \
1664
if (((am) & (right)) && !((sa) & (share))) { \
1666
return NT_STATUS_SHARING_VIOLATION; \
1670
if (am2 & (SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA)) {
1673
if (am2 & SEC_FILE_READ_DATA) {
1675
} else if ((am2 & SEC_FILE_EXECUTE) && read_for_execute) {
1679
/* if either open involves no read.write or delete access then
1680
it can't conflict */
1681
if (!(am1 & (SEC_FILE_WRITE_DATA |
1682
SEC_FILE_APPEND_DATA |
1683
SEC_FILE_READ_DATA |
1686
return NT_STATUS_OK;
1688
if (!(am2 & (SEC_FILE_WRITE_DATA |
1689
SEC_FILE_APPEND_DATA |
1690
SEC_FILE_READ_DATA |
1693
return NT_STATUS_OK;
1696
/* check the basic share access */
1697
CHECK_MASK(am1, sa2,
1698
SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA,
1699
NTCREATEX_SHARE_ACCESS_WRITE);
1700
CHECK_MASK(am2, sa1,
1701
SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA,
1702
NTCREATEX_SHARE_ACCESS_WRITE);
1704
CHECK_MASK(am1, sa2,
1705
SEC_FILE_READ_DATA | SEC_FILE_EXECUTE,
1706
NTCREATEX_SHARE_ACCESS_READ);
1707
CHECK_MASK(am2, sa1,
1708
SEC_FILE_READ_DATA | SEC_FILE_EXECUTE,
1709
NTCREATEX_SHARE_ACCESS_READ);
1711
CHECK_MASK(am1, sa2,
1713
NTCREATEX_SHARE_ACCESS_DELETE);
1714
CHECK_MASK(am2, sa1,
1716
NTCREATEX_SHARE_ACCESS_DELETE);
1718
return NT_STATUS_OK;
1722
a denytest for ntcreatex
1724
static bool torture_ntdenytest(struct torture_context *tctx,
1725
struct smbcli_state *cli1, struct smbcli_state *cli2, int client)
1727
const struct bit_value share_access_bits[] = {
1728
{ NTCREATEX_SHARE_ACCESS_READ, "S_R" },
1729
{ NTCREATEX_SHARE_ACCESS_WRITE, "S_W" },
1730
{ NTCREATEX_SHARE_ACCESS_DELETE, "S_D" }
1732
const struct bit_value access_mask_bits[] = {
1733
{ SEC_FILE_READ_DATA, "R_DATA" },
1734
{ SEC_FILE_WRITE_DATA, "W_DATA" },
1735
{ SEC_FILE_READ_ATTRIBUTE, "R_ATTR" },
1736
{ SEC_FILE_WRITE_ATTRIBUTE, "W_ATTR" },
1737
{ SEC_FILE_READ_EA, "R_EAS " },
1738
{ SEC_FILE_WRITE_EA, "W_EAS " },
1739
{ SEC_FILE_APPEND_DATA, "A_DATA" },
1740
{ SEC_FILE_EXECUTE, "EXEC " }
1744
bool correct = true;
1745
struct timeval tv, tv_start;
1747
int nbits1 = ARRAY_SIZE(share_access_bits);
1748
int nbits2 = ARRAY_SIZE(access_mask_bits);
1749
union smb_open io1, io2;
1750
extern int torture_numops;
1754
torture_comment(tctx, "format: server correct\n");
1758
fname = talloc_asprintf(cli1, "\\ntdeny_%d.dll", client);
1760
smbcli_unlink(cli1->tree, fname);
1761
fnum1 = smbcli_open(cli1->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
1762
smbcli_write(cli1->tree, fnum1, 0, buf, 0, sizeof(buf));
1763
smbcli_close(cli1->tree, fnum1);
1765
GetTimeOfDay(&tv_start);
1767
io1.ntcreatex.level = RAW_OPEN_NTCREATEX;
1768
io1.ntcreatex.in.root_fid = 0;
1769
io1.ntcreatex.in.flags = NTCREATEX_FLAGS_EXTENDED;
1770
io1.ntcreatex.in.create_options = NTCREATEX_OPTIONS_NON_DIRECTORY_FILE;
1771
io1.ntcreatex.in.file_attr = 0;
1772
io1.ntcreatex.in.alloc_size = 0;
1773
io1.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;
1774
io1.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_IMPERSONATION;
1775
io1.ntcreatex.in.security_flags = 0;
1776
io1.ntcreatex.in.fname = fname;
1779
torture_comment(tctx, "testing %d entries on %s\n", torture_numops, fname);
1781
for (i=0;i<torture_numops;i++) {
1782
NTSTATUS status1, status2, status2_p;
1784
TALLOC_CTX *mem_ctx = talloc_new(NULL);
1785
enum deny_result res, res2;
1786
int b_sa1 = random() & ((1<<nbits1)-1);
1787
int b_am1 = random() & ((1<<nbits2)-1);
1788
int b_sa2 = random() & ((1<<nbits1)-1);
1789
int b_am2 = random() & ((1<<nbits2)-1);
1790
bool read_for_execute;
1792
progress_bar(tctx, i, torture_numops);
1794
io1.ntcreatex.in.share_access = map_bits(share_access_bits, b_sa1, nbits1);
1795
io1.ntcreatex.in.access_mask = map_bits(access_mask_bits, b_am1, nbits2);
1797
io2.ntcreatex.in.share_access = map_bits(share_access_bits, b_sa2, nbits1);
1798
io2.ntcreatex.in.access_mask = map_bits(access_mask_bits, b_am2, nbits2);
1800
status1 = smb_raw_open(cli1->tree, mem_ctx, &io1);
1801
status2 = smb_raw_open(cli2->tree, mem_ctx, &io2);
1803
if (random() % 2 == 0) {
1804
read_for_execute = true;
1806
read_for_execute = false;
1809
if (!NT_STATUS_IS_OK(status1)) {
1811
} else if (!NT_STATUS_IS_OK(status2)) {
1817
/* we can't use smbcli_read() as we need to
1818
set read_for_execute */
1819
r.readx.level = RAW_READ_READX;
1820
r.readx.in.file.fnum = io2.ntcreatex.out.file.fnum;
1821
r.readx.in.offset = 0;
1822
r.readx.in.mincnt = sizeof(buf);
1823
r.readx.in.maxcnt = sizeof(buf);
1824
r.readx.in.remaining = 0;
1825
r.readx.in.read_for_execute = read_for_execute;
1826
r.readx.out.data = buf;
1829
status = smb_raw_read(cli2->tree, &r);
1830
if (NT_STATUS_IS_OK(status)) {
1833
if (smbcli_write(cli2->tree, io2.ntcreatex.out.file.fnum,
1834
0, buf, 0, sizeof(buf)) >= 1) {
1839
if (NT_STATUS_IS_OK(status1)) {
1840
smbcli_close(cli1->tree, io1.ntcreatex.out.file.fnum);
1842
if (NT_STATUS_IS_OK(status2)) {
1843
smbcli_close(cli2->tree, io2.ntcreatex.out.file.fnum);
1846
status2_p = predict_share_conflict(io1.ntcreatex.in.share_access,
1847
io1.ntcreatex.in.access_mask,
1848
io2.ntcreatex.in.share_access,
1849
io2.ntcreatex.in.access_mask,
1854
tdif = usec_time_diff(&tv, &tv_start);
1856
if (torture_setting_bool(tctx, "showall", false) ||
1857
!NT_STATUS_EQUAL(status2, status2_p) ||
1859
torture_comment(tctx, "\n%-20s %-70s\n%-20s %-70s %4s %4s %s/%s\n",
1860
bit_string(mem_ctx, share_access_bits, b_sa1, nbits1),
1861
bit_string(mem_ctx, access_mask_bits, b_am1, nbits2),
1862
bit_string(mem_ctx, share_access_bits, b_sa2, nbits1),
1863
bit_string(mem_ctx, access_mask_bits, b_am2, nbits2),
1867
nt_errstr(status2_p));
1872
!NT_STATUS_EQUAL(status2, status2_p)) {
1873
CHECK_MAX_FAILURES(failed);
1877
talloc_free(mem_ctx);
1881
smbcli_unlink(cli1->tree, fname);
1883
torture_comment(tctx, "finshed ntdenytest (%d failures)\n", failures);
1890
a denytest for ntcreatex
1892
bool torture_ntdenytest1(struct torture_context *tctx,
1893
struct smbcli_state *cli, int client)
1895
extern int torture_seed;
1897
srandom(torture_seed + client);
1899
torture_comment(tctx, "starting ntdenytest1 client %d\n", client);
1901
return torture_ntdenytest(tctx, cli, cli, client);
1905
a denytest for ntcreatex
1907
bool torture_ntdenytest2(struct torture_context *torture,
1908
struct smbcli_state *cli1,
1909
struct smbcli_state *cli2)
1911
return torture_ntdenytest(torture, cli1, cli2, 0);
1915
#define CHECK_STATUS(status, correct) do { \
1916
if (!NT_STATUS_EQUAL(status, correct)) { \
1917
torture_comment(tctx, "(%s) Incorrect status %s - should be %s\n", \
1918
__location__, nt_errstr(status), nt_errstr(correct)); \
1923
#define CHECK_VAL(v, correct) do { \
1924
if ((v) != (correct)) { \
1925
torture_comment(tctx, "(%s) wrong value for %s 0x%x - should be 0x%x\n", \
1926
__location__, #v, (int)(v), (int)correct); \
1931
test sharing of handles with DENY_DOS on a single connection
1933
bool torture_denydos_sharing(struct torture_context *tctx,
1934
struct smbcli_state *cli)
1937
union smb_fileinfo finfo;
1938
const char *fname = "\\torture_denydos.txt";
1940
int fnum1 = -1, fnum2 = -1;
1942
union smb_setfileinfo sfinfo;
1943
TALLOC_CTX *mem_ctx;
1945
mem_ctx = talloc_new(cli);
1947
torture_comment(tctx, "Checking DENY_DOS shared handle semantics\n");
1948
smbcli_unlink(cli->tree, fname);
1950
io.openx.level = RAW_OPEN_OPENX;
1951
io.openx.in.fname = fname;
1952
io.openx.in.flags = OPENX_FLAGS_ADDITIONAL_INFO;
1953
io.openx.in.open_mode = OPENX_MODE_ACCESS_RDWR | OPENX_MODE_DENY_DOS;
1954
io.openx.in.open_func = OPENX_OPEN_FUNC_OPEN | OPENX_OPEN_FUNC_CREATE;
1955
io.openx.in.search_attrs = 0;
1956
io.openx.in.file_attrs = 0;
1957
io.openx.in.write_time = 0;
1958
io.openx.in.size = 0;
1959
io.openx.in.timeout = 0;
1961
torture_comment(tctx, "openx twice with RDWR/DENY_DOS\n");
1962
status = smb_raw_open(cli->tree, mem_ctx, &io);
1963
CHECK_STATUS(status, NT_STATUS_OK);
1964
fnum1 = io.openx.out.file.fnum;
1966
status = smb_raw_open(cli->tree, mem_ctx, &io);
1967
CHECK_STATUS(status, NT_STATUS_OK);
1968
fnum2 = io.openx.out.file.fnum;
1970
torture_comment(tctx, "fnum1=%d fnum2=%d\n", fnum1, fnum2);
1972
sfinfo.generic.level = RAW_SFILEINFO_POSITION_INFORMATION;
1973
sfinfo.position_information.in.file.fnum = fnum1;
1974
sfinfo.position_information.in.position = 1000;
1975
status = smb_raw_setfileinfo(cli->tree, &sfinfo);
1976
CHECK_STATUS(status, NT_STATUS_OK);
1978
torture_comment(tctx, "two handles should be same file handle\n");
1979
finfo.position_information.level = RAW_FILEINFO_POSITION_INFORMATION;
1980
finfo.position_information.in.file.fnum = fnum1;
1981
status = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo);
1982
CHECK_STATUS(status, NT_STATUS_OK);
1983
CHECK_VAL(finfo.position_information.out.position, 1000);
1985
finfo.position_information.in.file.fnum = fnum2;
1986
status = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo);
1987
CHECK_STATUS(status, NT_STATUS_OK);
1988
CHECK_VAL(finfo.position_information.out.position, 1000);
1991
smbcli_close(cli->tree, fnum1);
1992
smbcli_close(cli->tree, fnum2);
1994
torture_comment(tctx, "openx twice with RDWR/DENY_NONE\n");
1995
io.openx.in.open_mode = OPENX_MODE_ACCESS_RDWR | OPENX_MODE_DENY_NONE;
1996
status = smb_raw_open(cli->tree, mem_ctx, &io);
1997
CHECK_STATUS(status, NT_STATUS_OK);
1998
fnum1 = io.openx.out.file.fnum;
2000
io.openx.in.open_func = OPENX_OPEN_FUNC_OPEN;
2001
status = smb_raw_open(cli->tree, mem_ctx, &io);
2002
CHECK_STATUS(status, NT_STATUS_OK);
2003
fnum2 = io.openx.out.file.fnum;
2005
torture_comment(tctx, "fnum1=%d fnum2=%d\n", fnum1, fnum2);
2007
torture_comment(tctx, "two handles should be separate\n");
2008
sfinfo.generic.level = RAW_SFILEINFO_POSITION_INFORMATION;
2009
sfinfo.position_information.in.file.fnum = fnum1;
2010
sfinfo.position_information.in.position = 1000;
2011
status = smb_raw_setfileinfo(cli->tree, &sfinfo);
2012
CHECK_STATUS(status, NT_STATUS_OK);
2014
finfo.position_information.level = RAW_FILEINFO_POSITION_INFORMATION;
2015
finfo.position_information.in.file.fnum = fnum1;
2016
status = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo);
2017
CHECK_STATUS(status, NT_STATUS_OK);
2018
CHECK_VAL(finfo.position_information.out.position, 1000);
2020
finfo.position_information.in.file.fnum = fnum2;
2021
status = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo);
2022
CHECK_STATUS(status, NT_STATUS_OK);
2023
CHECK_VAL(finfo.position_information.out.position, 0);
2026
smbcli_close(cli->tree, fnum1);
2027
smbcli_close(cli->tree, fnum2);
2028
smbcli_unlink(cli->tree, fname);