~zulcss/samba/server-dailies-3.4

« back to all changes in this revision

Viewing changes to source4/torture/basic/denytest.c

  • Committer: Chuck Short
  • Date: 2010-09-28 20:38:39 UTC
  • Revision ID: zulcss@ubuntu.com-20100928203839-pgjulytsi9ue63x1
Initial version

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* 
 
2
   Unix SMB/CIFS implementation.
 
3
   SMB torture tester - deny mode scanning functions
 
4
   Copyright (C) Andrew Tridgell 2001
 
5
   
 
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.
 
10
   
 
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.
 
15
   
 
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/>.
 
18
*/
 
19
 
 
20
#include "includes.h"
 
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"
 
26
 
 
27
extern int torture_failures;
 
28
 
 
29
#define CHECK_MAX_FAILURES(label) do { if (++failures >= torture_failures) goto label; } while (0)
 
30
 
 
31
enum deny_result {A_0=0, A_X=1, A_R=2, A_W=3, A_RW=5};
 
32
 
 
33
static const char *denystr(int denymode)
 
34
{
 
35
        const struct {
 
36
                int v;
 
37
                const char *name; 
 
38
        } deny_modes[] = {
 
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"},
 
45
                {-1, NULL}};
 
46
        int i;
 
47
        for (i=0;deny_modes[i].name;i++) {
 
48
                if (deny_modes[i].v == denymode) return deny_modes[i].name;
 
49
        }
 
50
        return "DENY_XXX";
 
51
}
 
52
 
 
53
static const char *openstr(int mode)
 
54
{
 
55
        const struct {
 
56
                int v;
 
57
                const char *name; 
 
58
        } open_modes[] = {
 
59
                {O_RDWR, "O_RDWR"},
 
60
                {O_RDONLY, "O_RDONLY"},
 
61
                {O_WRONLY, "O_WRONLY"},
 
62
                {-1, NULL}};
 
63
        int i;
 
64
        for (i=0;open_modes[i].name;i++) {
 
65
                if (open_modes[i].v == mode) return open_modes[i].name;
 
66
        }
 
67
        return "O_XXX";
 
68
}
 
69
 
 
70
static const char *resultstr(enum deny_result res)
 
71
{
 
72
        const struct {
 
73
                enum deny_result res;
 
74
                const char *name; 
 
75
        } results[] = {
 
76
                {A_X, "X"},
 
77
                {A_0, "-"},
 
78
                {A_R, "R"},
 
79
                {A_W, "W"},
 
80
                {A_RW,"RW"}};
 
81
        int i;
 
82
        for (i=0;ARRAY_SIZE(results);i++) {
 
83
                if (results[i].res == res) return results[i].name;
 
84
        }
 
85
        return "*";
 
86
}
 
87
 
 
88
static const struct {
 
89
        int isexe;
 
90
        int mode1, deny1;
 
91
        int mode2, deny2;
 
92
        enum deny_result result;
 
93
} denytable2[] = {
 
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}
 
742
};
 
743
 
 
744
 
 
745
static const struct {
 
746
        int isexe;
 
747
        int mode1, deny1;
 
748
        int mode2, deny2;
 
749
        enum deny_result result;
 
750
} denytable1[] = {
 
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}
 
1399
};
 
1400
 
 
1401
 
 
1402
static void progress_bar(struct torture_context *tctx, uint_t i, uint_t total)
 
1403
{
 
1404
        if (torture_setting_bool(tctx, "progress", true)) {
 
1405
                torture_comment(tctx, "%5d/%5d\r", i, total);
 
1406
                fflush(stdout);
 
1407
        }
 
1408
}
 
1409
 
 
1410
/*
 
1411
  this produces a matrix of deny mode behaviour for 1 connection
 
1412
 */
 
1413
bool torture_denytest1(struct torture_context *tctx, 
 
1414
                       struct smbcli_state *cli1)
 
1415
{
 
1416
        int fnum1, fnum2;
 
1417
        int i;
 
1418
        bool correct = true;
 
1419
        struct timeval tv, tv_start;
 
1420
        const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"};
 
1421
        int failures=0;
 
1422
 
 
1423
        torture_comment(tctx, "Testing deny modes with 1 connection\n");
 
1424
 
 
1425
        for (i=0;i<2;i++) {
 
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);
 
1430
        }
 
1431
 
 
1432
        torture_comment(tctx, "testing %d entries\n", (int)ARRAY_SIZE(denytable1));
 
1433
 
 
1434
        GetTimeOfDay(&tv_start);
 
1435
 
 
1436
        for (i=0; i<ARRAY_SIZE(denytable1); i++) {
 
1437
                enum deny_result res;
 
1438
                const char *fname = fnames[denytable1[i].isexe];
 
1439
 
 
1440
                progress_bar(tctx, i, ARRAY_SIZE(denytable1));
 
1441
 
 
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);
 
1448
 
 
1449
                if (fnum1 == -1) {
 
1450
                        res = A_X;
 
1451
                } else if (fnum2 == -1) {
 
1452
                        res = A_0;
 
1453
                } else {
 
1454
                        uint8_t x = 1;
 
1455
                        res = A_0;
 
1456
                        if (smbcli_read(cli1->tree, fnum2, &x, 0, 1) == 1) {
 
1457
                                res += A_R;
 
1458
                        }
 
1459
                        if (smbcli_write(cli1->tree, fnum2, 0, &x, 0, 1) == 1) {
 
1460
                                res += A_W;
 
1461
                        }
 
1462
                }
 
1463
 
 
1464
                if (torture_setting_bool(tctx, "showall", false) || 
 
1465
                        res != denytable1[i].result) {
 
1466
                        int64_t tdif;
 
1467
                        GetTimeOfDay(&tv);
 
1468
                        tdif = usec_time_diff(&tv, &tv_start);
 
1469
                        tdif /= 1000;
 
1470
                        torture_comment(tctx, "%lld: %s %8s %10s    %8s %10s    %s (correct=%s)\n",
 
1471
                               (long long)tdif,
 
1472
                               fname,
 
1473
                               denystr(denytable1[i].deny1),
 
1474
                               openstr(denytable1[i].mode1),
 
1475
                               denystr(denytable1[i].deny2),
 
1476
                               openstr(denytable1[i].mode2),
 
1477
                               resultstr(res),
 
1478
                               resultstr(denytable1[i].result));
 
1479
                }
 
1480
 
 
1481
                if (res != denytable1[i].result) {
 
1482
                        correct = false;
 
1483
                        CHECK_MAX_FAILURES(failed);
 
1484
                }
 
1485
 
 
1486
                smbcli_close(cli1->tree, fnum1);
 
1487
                smbcli_close(cli1->tree, fnum2);
 
1488
        }
 
1489
 
 
1490
failed:
 
1491
        for (i=0;i<2;i++) {
 
1492
                smbcli_unlink(cli1->tree, fnames[i]);
 
1493
        }
 
1494
                
 
1495
        torture_comment(tctx, "finshed denytest1 (%d failures)\n", failures);
 
1496
        return correct;
 
1497
}
 
1498
 
 
1499
 
 
1500
/*
 
1501
  this produces a matrix of deny mode behaviour with 2 connections
 
1502
 */
 
1503
bool torture_denytest2(struct torture_context *tctx, 
 
1504
                       struct smbcli_state *cli1, 
 
1505
                       struct smbcli_state *cli2)
 
1506
{
 
1507
        int fnum1, fnum2;
 
1508
        int i;
 
1509
        bool correct = true;
 
1510
        const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
 
1511
        struct timeval tv, tv_start;
 
1512
        int failures=0;
 
1513
 
 
1514
        for (i=0;i<2;i++) {
 
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);
 
1519
        }
 
1520
 
 
1521
        GetTimeOfDay(&tv_start);
 
1522
 
 
1523
        for (i=0; i<ARRAY_SIZE(denytable2); i++) {
 
1524
                enum deny_result res;
 
1525
                const char *fname = fnames[denytable2[i].isexe];
 
1526
 
 
1527
                progress_bar(tctx, i, ARRAY_SIZE(denytable1));
 
1528
 
 
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);
 
1535
 
 
1536
                if (fnum1 == -1) {
 
1537
                        res = A_X;
 
1538
                } else if (fnum2 == -1) {
 
1539
                        res = A_0;
 
1540
                } else {
 
1541
                        uint8_t x = 1;
 
1542
                        res = A_0;
 
1543
                        if (smbcli_read(cli2->tree, fnum2, &x, 0, 1) == 1) {
 
1544
                                res += A_R;
 
1545
                        }
 
1546
                        if (smbcli_write(cli2->tree, fnum2, 0, &x, 0, 1) == 1) {
 
1547
                                res += A_W;
 
1548
                        }
 
1549
                }
 
1550
 
 
1551
                if (torture_setting_bool(tctx, "showall", false) || 
 
1552
                        res != denytable2[i].result) {
 
1553
                        int64_t tdif;
 
1554
                        GetTimeOfDay(&tv);
 
1555
                        tdif = usec_time_diff(&tv, &tv_start);
 
1556
                        tdif /= 1000;
 
1557
                        torture_comment(tctx, "%lld: %s %8s %10s    %8s %10s    %s (correct=%s)\n",
 
1558
                               (long long)tdif,
 
1559
                               fname,
 
1560
                               denystr(denytable2[i].deny1),
 
1561
                               openstr(denytable2[i].mode1),
 
1562
                               denystr(denytable2[i].deny2),
 
1563
                               openstr(denytable2[i].mode2),
 
1564
                               resultstr(res),
 
1565
                               resultstr(denytable2[i].result));
 
1566
                }
 
1567
 
 
1568
                if (res != denytable2[i].result) {
 
1569
                        correct = false;
 
1570
                        CHECK_MAX_FAILURES(failed);
 
1571
                }
 
1572
 
 
1573
                smbcli_close(cli1->tree, fnum1);
 
1574
                smbcli_close(cli2->tree, fnum2);
 
1575
        }
 
1576
 
 
1577
failed:         
 
1578
        for (i=0;i<2;i++) {
 
1579
                smbcli_unlink(cli1->tree, fnames[i]);
 
1580
        }
 
1581
 
 
1582
        torture_comment(tctx, "finshed denytest2 (%d failures)\n", failures);
 
1583
        return correct;
 
1584
}
 
1585
 
 
1586
 
 
1587
 
 
1588
/*
 
1589
   simple test harness for playing with deny modes
 
1590
 */
 
1591
bool torture_denytest3(struct torture_context *tctx, 
 
1592
                       struct smbcli_state *cli1,
 
1593
                       struct smbcli_state *cli2)
 
1594
{
 
1595
        int fnum1, fnum2;
 
1596
        const char *fname;
 
1597
 
 
1598
        fname = "\\deny_dos1.dat";
 
1599
 
 
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);
 
1607
 
 
1608
 
 
1609
        fname = "\\deny_dos2.dat";
 
1610
 
 
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);
 
1618
 
 
1619
        return true;
 
1620
}
 
1621
 
 
1622
struct bit_value {
 
1623
        uint32_t value;
 
1624
        const char *name;
 
1625
};
 
1626
 
 
1627
static uint32_t map_bits(const struct bit_value *bv, int b, int nbits)
 
1628
{
 
1629
        int i;
 
1630
        uint32_t ret = 0;
 
1631
        for (i=0;i<nbits;i++) {
 
1632
                if (b & (1<<i)) {
 
1633
                        ret |= bv[i].value;
 
1634
                }
 
1635
        }
 
1636
        return ret;
 
1637
}
 
1638
 
 
1639
static const char *bit_string(TALLOC_CTX *mem_ctx, const struct bit_value *bv, int b, int nbits)
 
1640
{
 
1641
        char *ret = NULL;
 
1642
        int i;
 
1643
        for (i=0;i<nbits;i++) {
 
1644
                if (b & (1<<i)) {
 
1645
                        if (ret == NULL) {
 
1646
                                ret = talloc_asprintf(mem_ctx, "%s", bv[i].name);
 
1647
                        } else {
 
1648
                                ret = talloc_asprintf_append_buffer(ret, " | %s", bv[i].name);
 
1649
                        }
 
1650
                }
 
1651
        }
 
1652
        if (ret == NULL) ret = talloc_strdup(mem_ctx, "(NONE)");
 
1653
        return ret;
 
1654
}
 
1655
 
 
1656
 
 
1657
/*
 
1658
  determine if two opens conflict
 
1659
*/
 
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)
 
1662
{
 
1663
#define CHECK_MASK(am, sa, right, share) do { \
 
1664
        if (((am) & (right)) && !((sa) & (share))) { \
 
1665
                *res = A_0; \
 
1666
                return NT_STATUS_SHARING_VIOLATION; \
 
1667
        }} while (0)
 
1668
 
 
1669
        *res = A_0;
 
1670
        if (am2 & (SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA)) {
 
1671
                *res += A_W;
 
1672
        }
 
1673
        if (am2 & SEC_FILE_READ_DATA) {
 
1674
                *res += A_R;
 
1675
        } else if ((am2 & SEC_FILE_EXECUTE) && read_for_execute) {
 
1676
                *res += A_R;
 
1677
        }
 
1678
 
 
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 | 
 
1684
                     SEC_FILE_EXECUTE | 
 
1685
                     SEC_STD_DELETE))) {
 
1686
                return NT_STATUS_OK;
 
1687
        }
 
1688
        if (!(am2 & (SEC_FILE_WRITE_DATA | 
 
1689
                     SEC_FILE_APPEND_DATA |
 
1690
                     SEC_FILE_READ_DATA | 
 
1691
                     SEC_FILE_EXECUTE | 
 
1692
                     SEC_STD_DELETE))) {
 
1693
                return NT_STATUS_OK;
 
1694
        }
 
1695
 
 
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);
 
1703
 
 
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);
 
1710
 
 
1711
        CHECK_MASK(am1, sa2, 
 
1712
                   SEC_STD_DELETE, 
 
1713
                   NTCREATEX_SHARE_ACCESS_DELETE);
 
1714
        CHECK_MASK(am2, sa1, 
 
1715
                   SEC_STD_DELETE, 
 
1716
                   NTCREATEX_SHARE_ACCESS_DELETE);
 
1717
 
 
1718
        return NT_STATUS_OK;
 
1719
}
 
1720
 
 
1721
/*
 
1722
  a denytest for ntcreatex
 
1723
 */
 
1724
static bool torture_ntdenytest(struct torture_context *tctx, 
 
1725
                                                           struct smbcli_state *cli1, struct smbcli_state *cli2, int client)
 
1726
{
 
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" }
 
1731
        };
 
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  " }
 
1741
        };
 
1742
        int fnum1;
 
1743
        int i;
 
1744
        bool correct = true;
 
1745
        struct timeval tv, tv_start;
 
1746
        const char *fname;
 
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;
 
1751
        int failures = 0;
 
1752
        uint8_t buf[1];
 
1753
 
 
1754
        torture_comment(tctx, "format: server correct\n");
 
1755
 
 
1756
        ZERO_STRUCT(buf);
 
1757
 
 
1758
        fname = talloc_asprintf(cli1, "\\ntdeny_%d.dll", client);
 
1759
 
 
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);
 
1764
 
 
1765
        GetTimeOfDay(&tv_start);
 
1766
 
 
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;
 
1777
        io2 = io1;
 
1778
 
 
1779
        torture_comment(tctx, "testing %d entries on %s\n", torture_numops, fname);
 
1780
 
 
1781
        for (i=0;i<torture_numops;i++) {
 
1782
                NTSTATUS status1, status2, status2_p;
 
1783
                int64_t tdif;
 
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;
 
1791
 
 
1792
                progress_bar(tctx, i, torture_numops);
 
1793
                
 
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);
 
1796
                
 
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);
 
1799
 
 
1800
                status1 = smb_raw_open(cli1->tree, mem_ctx, &io1);
 
1801
                status2 = smb_raw_open(cli2->tree, mem_ctx, &io2);
 
1802
 
 
1803
                if (random() % 2 == 0) {
 
1804
                        read_for_execute = true;
 
1805
                } else {
 
1806
                        read_for_execute = false;
 
1807
                }
 
1808
                
 
1809
                if (!NT_STATUS_IS_OK(status1)) {
 
1810
                        res = A_X;
 
1811
                } else if (!NT_STATUS_IS_OK(status2)) {
 
1812
                        res = A_0;
 
1813
                } else {
 
1814
                        union smb_read r;
 
1815
                        NTSTATUS status;
 
1816
 
 
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;
 
1827
 
 
1828
                        res = A_0;
 
1829
                        status = smb_raw_read(cli2->tree, &r);
 
1830
                        if (NT_STATUS_IS_OK(status)) {
 
1831
                                res += A_R;
 
1832
                        }
 
1833
                        if (smbcli_write(cli2->tree, io2.ntcreatex.out.file.fnum,
 
1834
                                         0, buf, 0, sizeof(buf)) >= 1) {
 
1835
                                res += A_W;
 
1836
                        }
 
1837
                }
 
1838
                
 
1839
                if (NT_STATUS_IS_OK(status1)) {
 
1840
                        smbcli_close(cli1->tree, io1.ntcreatex.out.file.fnum);
 
1841
                }
 
1842
                if (NT_STATUS_IS_OK(status2)) {
 
1843
                        smbcli_close(cli2->tree, io2.ntcreatex.out.file.fnum);
 
1844
                }
 
1845
                
 
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, 
 
1850
                                                   read_for_execute,
 
1851
                                                   &res2);
 
1852
                
 
1853
                GetTimeOfDay(&tv);
 
1854
                tdif = usec_time_diff(&tv, &tv_start);
 
1855
                tdif /= 1000;
 
1856
                if (torture_setting_bool(tctx, "showall", false) || 
 
1857
                    !NT_STATUS_EQUAL(status2, status2_p) ||
 
1858
                    res != res2) {
 
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),
 
1864
                               resultstr(res),
 
1865
                               resultstr(res2),
 
1866
                               nt_errstr(status2),
 
1867
                               nt_errstr(status2_p));
 
1868
                        fflush(stdout);
 
1869
                }
 
1870
                
 
1871
                if (res != res2 ||
 
1872
                    !NT_STATUS_EQUAL(status2, status2_p)) {
 
1873
                        CHECK_MAX_FAILURES(failed);
 
1874
                        correct = false;
 
1875
                }
 
1876
                
 
1877
                talloc_free(mem_ctx);
 
1878
        }
 
1879
 
 
1880
failed:
 
1881
        smbcli_unlink(cli1->tree, fname);
 
1882
        
 
1883
        torture_comment(tctx, "finshed ntdenytest (%d failures)\n", failures);
 
1884
        return correct;
 
1885
}
 
1886
 
 
1887
 
 
1888
 
 
1889
/*
 
1890
  a denytest for ntcreatex
 
1891
 */
 
1892
bool torture_ntdenytest1(struct torture_context *tctx, 
 
1893
                         struct smbcli_state *cli, int client)
 
1894
{
 
1895
        extern int torture_seed;
 
1896
 
 
1897
        srandom(torture_seed + client);
 
1898
 
 
1899
        torture_comment(tctx, "starting ntdenytest1 client %d\n", client);
 
1900
 
 
1901
        return torture_ntdenytest(tctx, cli, cli, client);
 
1902
}
 
1903
 
 
1904
/*
 
1905
  a denytest for ntcreatex
 
1906
 */
 
1907
bool torture_ntdenytest2(struct torture_context *torture, 
 
1908
                         struct smbcli_state *cli1,
 
1909
                         struct smbcli_state *cli2)
 
1910
{
 
1911
        return torture_ntdenytest(torture, cli1, cli2, 0);
 
1912
}
 
1913
 
 
1914
 
 
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)); \
 
1919
                ret = false; \
 
1920
                goto done; \
 
1921
        }} while (0)
 
1922
 
 
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); \
 
1927
                ret = false; \
 
1928
        }} while (0)
 
1929
 
 
1930
/*
 
1931
  test sharing of handles with DENY_DOS on a single connection
 
1932
*/
 
1933
bool torture_denydos_sharing(struct torture_context *tctx, 
 
1934
                             struct smbcli_state *cli)
 
1935
{
 
1936
        union smb_open io;
 
1937
        union smb_fileinfo finfo;
 
1938
        const char *fname = "\\torture_denydos.txt";
 
1939
        NTSTATUS status;
 
1940
        int fnum1 = -1, fnum2 = -1;
 
1941
        bool ret = true;
 
1942
        union smb_setfileinfo sfinfo;
 
1943
        TALLOC_CTX *mem_ctx;
 
1944
 
 
1945
        mem_ctx = talloc_new(cli);
 
1946
 
 
1947
        torture_comment(tctx, "Checking DENY_DOS shared handle semantics\n");
 
1948
        smbcli_unlink(cli->tree, fname);
 
1949
 
 
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;
 
1960
 
 
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;
 
1965
 
 
1966
        status = smb_raw_open(cli->tree, mem_ctx, &io);
 
1967
        CHECK_STATUS(status, NT_STATUS_OK);
 
1968
        fnum2 = io.openx.out.file.fnum;
 
1969
 
 
1970
        torture_comment(tctx, "fnum1=%d fnum2=%d\n", fnum1, fnum2);
 
1971
 
 
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);
 
1977
 
 
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);
 
1984
 
 
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);
 
1989
 
 
1990
 
 
1991
        smbcli_close(cli->tree, fnum1);
 
1992
        smbcli_close(cli->tree, fnum2);
 
1993
 
 
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;
 
1999
 
 
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;
 
2004
 
 
2005
        torture_comment(tctx, "fnum1=%d fnum2=%d\n", fnum1, fnum2);
 
2006
 
 
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);
 
2013
 
 
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);
 
2019
 
 
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);
 
2024
 
 
2025
done:
 
2026
        smbcli_close(cli->tree, fnum1);
 
2027
        smbcli_close(cli->tree, fnum2);
 
2028
        smbcli_unlink(cli->tree, fname);
 
2029
 
 
2030
        return ret;
 
2031
}
 
2032
 
 
2033