r4063: - change char * -> uint8_t in struct request_buffer
[ira/wip.git] / source4 / torture / basic / denytest.c
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 2 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, write to the Free Software
18    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 */
20
21 #include "includes.h"
22 #include "libcli/raw/libcliraw.h"
23 #include "librpc/gen_ndr/ndr_security.h"
24
25 extern BOOL torture_showall;
26 extern int torture_failures;
27
28 #define CHECK_MAX_FAILURES(label) do { if (++failures >= torture_failures) goto label; } while (0)
29
30 enum deny_result {A_0=0, A_X=1, A_R=2, A_W=3, A_RW=5};
31
32 static const char *denystr(int denymode)
33 {
34         struct {
35                 int v;
36                 const char *name; 
37         } deny_modes[] = {
38                 {DENY_DOS, "DENY_DOS"},
39                 {DENY_ALL, "DENY_ALL"},
40                 {DENY_WRITE, "DENY_WRITE"},
41                 {DENY_READ, "DENY_READ"},
42                 {DENY_NONE, "DENY_NONE"},
43                 {DENY_FCB, "DENY_FCB"},
44                 {-1, NULL}};
45         int i;
46         for (i=0;deny_modes[i].name;i++) {
47                 if (deny_modes[i].v == denymode) return deny_modes[i].name;
48         }
49         return "DENY_XXX";
50 }
51
52 static const char *openstr(int mode)
53 {
54         struct {
55                 int v;
56                 const char *name; 
57         } open_modes[] = {
58                 {O_RDWR, "O_RDWR"},
59                 {O_RDONLY, "O_RDONLY"},
60                 {O_WRONLY, "O_WRONLY"},
61                 {-1, NULL}};
62         int i;
63         for (i=0;open_modes[i].name;i++) {
64                 if (open_modes[i].v == mode) return open_modes[i].name;
65         }
66         return "O_XXX";
67 }
68
69 static const char *resultstr(enum deny_result res)
70 {
71         struct {
72                 enum deny_result res;
73                 const char *name; 
74         } results[] = {
75                 {A_X, "X"},
76                 {A_0, "-"},
77                 {A_R, "R"},
78                 {A_W, "W"},
79                 {A_RW,"RW"}};
80         int i;
81         for (i=0;ARRAY_SIZE(results);i++) {
82                 if (results[i].res == res) return results[i].name;
83         }
84         return "*";
85 }
86
87 static const struct {
88         int isexe;
89         int mode1, deny1;
90         int mode2, deny2;
91         enum deny_result result;
92 } denytable2[] = {
93 {1,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
94 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
95 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
96 {1,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
97 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
98 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
99 {1,   O_RDWR,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
100 {1,   O_RDWR,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
101 {1,   O_RDWR,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
102 {1,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
103 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
104 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
105 {1,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_RW},
106 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
107 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_W},
108 {1,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
109 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
110 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
111 {1, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
112 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
113 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
114 {1, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
115 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
116 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
117 {1, O_RDONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_RW},
118 {1, O_RDONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_R},
119 {1, O_RDONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_W},
120 {1, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
121 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
122 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
123 {1, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_RW},
124 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
125 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_W},
126 {1, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
127 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
128 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
129 {1, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
130 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
131 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
132 {1, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
133 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
134 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
135 {1, O_WRONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
136 {1, O_WRONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
137 {1, O_WRONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
138 {1, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_RW},
139 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_R},
140 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_W},
141 {1, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_RW},
142 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
143 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_W},
144 {1, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
145 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
146 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
147 {1,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
148 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
149 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
150 {1,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
151 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
152 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
153 {1,   O_RDWR,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
154 {1,   O_RDWR,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
155 {1,   O_RDWR,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
156 {1,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
157 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
158 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
159 {1,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
160 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
161 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
162 {1,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
163 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
164 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
165 {1, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
166 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
167 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
168 {1, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
169 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
170 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
171 {1, O_RDONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
172 {1, O_RDONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
173 {1, O_RDONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
174 {1, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
175 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
176 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
177 {1, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
178 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
179 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
180 {1, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
181 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
182 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
183 {1, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
184 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
185 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
186 {1, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
187 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
188 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
189 {1, O_WRONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
190 {1, O_WRONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
191 {1, O_WRONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
192 {1, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
193 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
194 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
195 {1, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
196 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
197 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
198 {1, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
199 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
200 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
201 {1,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
202 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
203 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
204 {1,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
205 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
206 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
207 {1,   O_RDWR, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
208 {1,   O_RDWR, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
209 {1,   O_RDWR, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
210 {1,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
211 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
212 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
213 {1,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
214 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
215 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
216 {1,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
217 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
218 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
219 {1, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
220 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
221 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
222 {1, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
223 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
224 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
225 {1, O_RDONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
226 {1, O_RDONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_R},
227 {1, O_RDONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
228 {1, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
229 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
230 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
231 {1, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
232 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
233 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
234 {1, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
235 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
236 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
237 {1, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
238 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
239 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
240 {1, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
241 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
242 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
243 {1, O_WRONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
244 {1, O_WRONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
245 {1, O_WRONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
246 {1, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
247 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_R},
248 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
249 {1, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
250 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
251 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
252 {1, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
253 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
254 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
255 {1,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
256 {1,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
257 {1,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_W},
258 {1,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
259 {1,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
260 {1,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
261 {1,   O_RDWR,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
262 {1,   O_RDWR,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
263 {1,   O_RDWR,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
264 {1,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
265 {1,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
266 {1,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
267 {1,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
268 {1,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
269 {1,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
270 {1,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
271 {1,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
272 {1,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
273 {1, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
274 {1, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
275 {1, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_W},
276 {1, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
277 {1, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
278 {1, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
279 {1, O_RDONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
280 {1, O_RDONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
281 {1, O_RDONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_W},
282 {1, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
283 {1, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
284 {1, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
285 {1, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
286 {1, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
287 {1, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
288 {1, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
289 {1, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
290 {1, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
291 {1, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
292 {1, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
293 {1, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_W},
294 {1, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
295 {1, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
296 {1, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
297 {1, O_WRONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
298 {1, O_WRONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
299 {1, O_WRONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
300 {1, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
301 {1, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
302 {1, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_W},
303 {1, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
304 {1, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
305 {1, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
306 {1, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
307 {1, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
308 {1, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
309 {1,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_RW},
310 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
311 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_W},
312 {1,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
313 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
314 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
315 {1,   O_RDWR,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
316 {1,   O_RDWR,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
317 {1,   O_RDWR,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
318 {1,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
319 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
320 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
321 {1,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
322 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
323 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
324 {1,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
325 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
326 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
327 {1, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_RW},
328 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
329 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_W},
330 {1, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
331 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
332 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
333 {1, O_RDONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_RW},
334 {1, O_RDONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_R},
335 {1, O_RDONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_W},
336 {1, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
337 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
338 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
339 {1, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
340 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
341 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
342 {1, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
343 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
344 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
345 {1, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_RW},
346 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
347 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_W},
348 {1, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
349 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
350 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
351 {1, O_WRONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
352 {1, O_WRONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
353 {1, O_WRONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
354 {1, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_RW},
355 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_R},
356 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_W},
357 {1, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
358 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
359 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
360 {1, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
361 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
362 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
363 {1,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_0},
364 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_0},
365 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_0},
366 {1,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
367 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
368 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
369 {1,   O_RDWR,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
370 {1,   O_RDWR,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
371 {1,   O_RDWR,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
372 {1,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
373 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
374 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
375 {1,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
376 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
377 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
378 {1,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_0},
379 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_0},
380 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_0},
381 {1, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_0},
382 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_0},
383 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_0},
384 {1, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
385 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
386 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
387 {1, O_RDONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
388 {1, O_RDONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
389 {1, O_RDONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
390 {1, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
391 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
392 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
393 {1, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
394 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
395 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
396 {1, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_0},
397 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_0},
398 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_0},
399 {1, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_0},
400 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_0},
401 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_0},
402 {1, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
403 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
404 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
405 {1, O_WRONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
406 {1, O_WRONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
407 {1, O_WRONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
408 {1, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
409 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
410 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
411 {1, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
412 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
413 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
414 {1, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_0},
415 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_0},
416 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_0},
417 {0,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_0},
418 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_0},
419 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_0},
420 {0,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
421 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
422 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
423 {0,   O_RDWR,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
424 {0,   O_RDWR,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
425 {0,   O_RDWR,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
426 {0,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
427 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
428 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
429 {0,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_0},
430 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_0},
431 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_0},
432 {0,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
433 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
434 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
435 {0, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_0},
436 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
437 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_0},
438 {0, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
439 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
440 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
441 {0, O_RDONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
442 {0, O_RDONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_R},
443 {0, O_RDONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
444 {0, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
445 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
446 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
447 {0, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_0},
448 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
449 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_0},
450 {0, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
451 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
452 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
453 {0, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_0},
454 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_0},
455 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_0},
456 {0, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
457 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
458 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
459 {0, O_WRONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
460 {0, O_WRONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
461 {0, O_WRONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
462 {0, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
463 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
464 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
465 {0, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_0},
466 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_0},
467 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_0},
468 {0, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
469 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
470 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
471 {0,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
472 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
473 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
474 {0,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
475 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
476 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
477 {0,   O_RDWR,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
478 {0,   O_RDWR,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
479 {0,   O_RDWR,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
480 {0,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
481 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
482 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
483 {0,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
484 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
485 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
486 {0,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
487 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
488 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
489 {0, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
490 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
491 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
492 {0, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
493 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
494 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
495 {0, O_RDONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
496 {0, O_RDONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
497 {0, O_RDONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
498 {0, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
499 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
500 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
501 {0, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
502 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
503 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
504 {0, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
505 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
506 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
507 {0, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
508 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
509 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
510 {0, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
511 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
512 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
513 {0, O_WRONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
514 {0, O_WRONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
515 {0, O_WRONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
516 {0, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
517 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
518 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
519 {0, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
520 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
521 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
522 {0, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
523 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
524 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
525 {0,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
526 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_0},
527 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
528 {0,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
529 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
530 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
531 {0,   O_RDWR, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
532 {0,   O_RDWR, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
533 {0,   O_RDWR, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
534 {0,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
535 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
536 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
537 {0,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
538 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
539 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
540 {0,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
541 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
542 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
543 {0, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
544 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
545 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
546 {0, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
547 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
548 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
549 {0, O_RDONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
550 {0, O_RDONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_R},
551 {0, O_RDONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
552 {0, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
553 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
554 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
555 {0, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
556 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
557 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
558 {0, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
559 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
560 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
561 {0, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
562 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_0},
563 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
564 {0, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
565 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
566 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
567 {0, O_WRONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
568 {0, O_WRONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
569 {0, O_WRONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
570 {0, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
571 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_R},
572 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
573 {0, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
574 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
575 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
576 {0, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
577 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
578 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
579 {0,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
580 {0,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
581 {0,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_0},
582 {0,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
583 {0,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
584 {0,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
585 {0,   O_RDWR,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
586 {0,   O_RDWR,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
587 {0,   O_RDWR,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
588 {0,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
589 {0,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
590 {0,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
591 {0,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
592 {0,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
593 {0,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
594 {0,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
595 {0,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
596 {0,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
597 {0, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
598 {0, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
599 {0, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_0},
600 {0, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
601 {0, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
602 {0, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
603 {0, O_RDONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
604 {0, O_RDONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
605 {0, O_RDONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_W},
606 {0, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
607 {0, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
608 {0, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
609 {0, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
610 {0, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
611 {0, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
612 {0, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
613 {0, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
614 {0, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
615 {0, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
616 {0, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
617 {0, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_0},
618 {0, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
619 {0, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
620 {0, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
621 {0, O_WRONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
622 {0, O_WRONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
623 {0, O_WRONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
624 {0, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
625 {0, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
626 {0, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_W},
627 {0, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
628 {0, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
629 {0, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
630 {0, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
631 {0, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
632 {0, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
633 {0,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_0},
634 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_0},
635 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_0},
636 {0,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
637 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
638 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
639 {0,   O_RDWR,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
640 {0,   O_RDWR,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
641 {0,   O_RDWR,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
642 {0,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
643 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
644 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
645 {0,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
646 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
647 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
648 {0,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
649 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
650 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
651 {0, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_0},
652 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
653 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_0},
654 {0, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
655 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
656 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
657 {0, O_RDONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_RW},
658 {0, O_RDONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_R},
659 {0, O_RDONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_W},
660 {0, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
661 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
662 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
663 {0, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
664 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
665 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
666 {0, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
667 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
668 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
669 {0, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_0},
670 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_0},
671 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_0},
672 {0, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
673 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
674 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
675 {0, O_WRONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
676 {0, O_WRONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
677 {0, O_WRONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
678 {0, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_RW},
679 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_R},
680 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_W},
681 {0, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
682 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
683 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
684 {0, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
685 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
686 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
687 {0,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_0},
688 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_0},
689 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_0},
690 {0,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
691 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
692 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
693 {0,   O_RDWR,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
694 {0,   O_RDWR,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
695 {0,   O_RDWR,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
696 {0,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
697 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
698 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
699 {0,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
700 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
701 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
702 {0,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_0},
703 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_0},
704 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_0},
705 {0, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_0},
706 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_0},
707 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_0},
708 {0, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
709 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
710 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
711 {0, O_RDONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
712 {0, O_RDONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
713 {0, O_RDONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
714 {0, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
715 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
716 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
717 {0, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
718 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
719 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
720 {0, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_0},
721 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_0},
722 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_0},
723 {0, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_0},
724 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_0},
725 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_0},
726 {0, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
727 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
728 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
729 {0, O_WRONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
730 {0, O_WRONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
731 {0, O_WRONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
732 {0, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
733 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
734 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
735 {0, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
736 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
737 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
738 {0, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_0},
739 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_0},
740 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_0}
741 };
742
743
744 static const struct {
745         int isexe;
746         int mode1, deny1;
747         int mode2, deny2;
748         enum deny_result result;
749 } denytable1[] = {
750 {1,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
751 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
752 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
753 {1,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
754 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
755 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
756 {1,   O_RDWR,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
757 {1,   O_RDWR,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
758 {1,   O_RDWR,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
759 {1,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
760 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
761 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
762 {1,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_RW},
763 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
764 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_W},
765 {1,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
766 {1,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
767 {1,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
768 {1, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
769 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
770 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
771 {1, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
772 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
773 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
774 {1, O_RDONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_RW},
775 {1, O_RDONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_R},
776 {1, O_RDONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_W},
777 {1, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
778 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
779 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
780 {1, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_RW},
781 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
782 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_W},
783 {1, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
784 {1, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
785 {1, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
786 {1, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
787 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
788 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
789 {1, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
790 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
791 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
792 {1, O_WRONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
793 {1, O_WRONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
794 {1, O_WRONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
795 {1, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_RW},
796 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_R},
797 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_W},
798 {1, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_RW},
799 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
800 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_W},
801 {1, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
802 {1, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
803 {1, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
804 {1,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
805 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
806 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
807 {1,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
808 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
809 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
810 {1,   O_RDWR,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
811 {1,   O_RDWR,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
812 {1,   O_RDWR,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
813 {1,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
814 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
815 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
816 {1,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
817 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
818 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
819 {1,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
820 {1,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
821 {1,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
822 {1, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
823 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
824 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
825 {1, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
826 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
827 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
828 {1, O_RDONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
829 {1, O_RDONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
830 {1, O_RDONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
831 {1, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
832 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
833 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
834 {1, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
835 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
836 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
837 {1, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
838 {1, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
839 {1, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
840 {1, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
841 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
842 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
843 {1, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
844 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
845 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
846 {1, O_WRONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
847 {1, O_WRONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
848 {1, O_WRONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
849 {1, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
850 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
851 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
852 {1, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
853 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
854 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
855 {1, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
856 {1, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
857 {1, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
858 {1,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
859 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
860 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
861 {1,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
862 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
863 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
864 {1,   O_RDWR, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
865 {1,   O_RDWR, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
866 {1,   O_RDWR, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
867 {1,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
868 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
869 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
870 {1,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
871 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
872 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
873 {1,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
874 {1,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
875 {1,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
876 {1, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
877 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
878 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
879 {1, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
880 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
881 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
882 {1, O_RDONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
883 {1, O_RDONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_R},
884 {1, O_RDONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
885 {1, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
886 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
887 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
888 {1, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
889 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
890 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
891 {1, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
892 {1, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
893 {1, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
894 {1, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
895 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
896 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
897 {1, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
898 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
899 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
900 {1, O_WRONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
901 {1, O_WRONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
902 {1, O_WRONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
903 {1, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
904 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_R},
905 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
906 {1, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
907 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
908 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
909 {1, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
910 {1, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
911 {1, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
912 {1,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
913 {1,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
914 {1,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_W},
915 {1,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
916 {1,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
917 {1,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
918 {1,   O_RDWR,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
919 {1,   O_RDWR,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
920 {1,   O_RDWR,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
921 {1,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
922 {1,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
923 {1,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
924 {1,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
925 {1,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
926 {1,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
927 {1,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
928 {1,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
929 {1,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
930 {1, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
931 {1, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
932 {1, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_W},
933 {1, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
934 {1, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
935 {1, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
936 {1, O_RDONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
937 {1, O_RDONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
938 {1, O_RDONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_W},
939 {1, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
940 {1, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
941 {1, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
942 {1, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
943 {1, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
944 {1, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
945 {1, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
946 {1, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
947 {1, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
948 {1, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
949 {1, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
950 {1, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_W},
951 {1, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
952 {1, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
953 {1, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
954 {1, O_WRONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
955 {1, O_WRONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
956 {1, O_WRONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
957 {1, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
958 {1, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
959 {1, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_W},
960 {1, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
961 {1, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
962 {1, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
963 {1, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
964 {1, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
965 {1, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
966 {1,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_RW},
967 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
968 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_W},
969 {1,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
970 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
971 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
972 {1,   O_RDWR,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
973 {1,   O_RDWR,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
974 {1,   O_RDWR,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
975 {1,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
976 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
977 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
978 {1,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
979 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
980 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
981 {1,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
982 {1,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
983 {1,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
984 {1, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_RW},
985 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
986 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_W},
987 {1, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
988 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
989 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
990 {1, O_RDONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_RW},
991 {1, O_RDONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_R},
992 {1, O_RDONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_W},
993 {1, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
994 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
995 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
996 {1, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
997 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
998 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
999 {1, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
1000 {1, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
1001 {1, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
1002 {1, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_RW},
1003 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
1004 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_W},
1005 {1, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
1006 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
1007 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
1008 {1, O_WRONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
1009 {1, O_WRONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
1010 {1, O_WRONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
1011 {1, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_RW},
1012 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_R},
1013 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_W},
1014 {1, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
1015 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
1016 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
1017 {1, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
1018 {1, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
1019 {1, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
1020 {1,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_RW},
1021 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_R},
1022 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_W},
1023 {1,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
1024 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
1025 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
1026 {1,   O_RDWR,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
1027 {1,   O_RDWR,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
1028 {1,   O_RDWR,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
1029 {1,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
1030 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
1031 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
1032 {1,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
1033 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
1034 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
1035 {1,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_RW},
1036 {1,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_RW},
1037 {1,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_RW},
1038 {1, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_RW},
1039 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_R},
1040 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_W},
1041 {1, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
1042 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
1043 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
1044 {1, O_RDONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
1045 {1, O_RDONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
1046 {1, O_RDONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
1047 {1, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
1048 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
1049 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
1050 {1, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
1051 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
1052 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
1053 {1, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_RW},
1054 {1, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_RW},
1055 {1, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_RW},
1056 {1, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_RW},
1057 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_R},
1058 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_W},
1059 {1, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
1060 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
1061 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
1062 {1, O_WRONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
1063 {1, O_WRONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
1064 {1, O_WRONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
1065 {1, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
1066 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
1067 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
1068 {1, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
1069 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
1070 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
1071 {1, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_RW},
1072 {1, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_RW},
1073 {1, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_RW},
1074 {0,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
1075 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
1076 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
1077 {0,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
1078 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
1079 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
1080 {0,   O_RDWR,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
1081 {0,   O_RDWR,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
1082 {0,   O_RDWR,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
1083 {0,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
1084 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
1085 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
1086 {0,   O_RDWR,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_0},
1087 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_0},
1088 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_0},
1089 {0,   O_RDWR,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_RW},
1090 {0,   O_RDWR,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_RW},
1091 {0,   O_RDWR,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_RW},
1092 {0, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_0},
1093 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
1094 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_0},
1095 {0, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
1096 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
1097 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
1098 {0, O_RDONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
1099 {0, O_RDONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_R},
1100 {0, O_RDONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
1101 {0, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
1102 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
1103 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
1104 {0, O_RDONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_0},
1105 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_R},
1106 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_0},
1107 {0, O_RDONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_0},
1108 {0, O_RDONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_0},
1109 {0, O_RDONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_0},
1110 {0, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_DOS,     A_RW},
1111 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_DOS,     A_R},
1112 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_DOS,     A_W},
1113 {0, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_ALL,     A_0},
1114 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_ALL,     A_0},
1115 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_ALL,     A_0},
1116 {0, O_WRONLY,   DENY_DOS,      O_RDWR, DENY_WRITE,     A_0},
1117 {0, O_WRONLY,   DENY_DOS,    O_RDONLY, DENY_WRITE,     A_0},
1118 {0, O_WRONLY,   DENY_DOS,    O_WRONLY, DENY_WRITE,     A_0},
1119 {0, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_READ,     A_0},
1120 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_READ,     A_0},
1121 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_READ,     A_0},
1122 {0, O_WRONLY,   DENY_DOS,      O_RDWR,  DENY_NONE,     A_0},
1123 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,  DENY_NONE,     A_0},
1124 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,  DENY_NONE,     A_0},
1125 {0, O_WRONLY,   DENY_DOS,      O_RDWR,   DENY_FCB,     A_RW},
1126 {0, O_WRONLY,   DENY_DOS,    O_RDONLY,   DENY_FCB,     A_RW},
1127 {0, O_WRONLY,   DENY_DOS,    O_WRONLY,   DENY_FCB,     A_RW},
1128 {0,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
1129 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
1130 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
1131 {0,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
1132 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
1133 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
1134 {0,   O_RDWR,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
1135 {0,   O_RDWR,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
1136 {0,   O_RDWR,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
1137 {0,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
1138 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
1139 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
1140 {0,   O_RDWR,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
1141 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
1142 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
1143 {0,   O_RDWR,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
1144 {0,   O_RDWR,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
1145 {0,   O_RDWR,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
1146 {0, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
1147 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
1148 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
1149 {0, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
1150 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
1151 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
1152 {0, O_RDONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
1153 {0, O_RDONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
1154 {0, O_RDONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
1155 {0, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
1156 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
1157 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
1158 {0, O_RDONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
1159 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
1160 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
1161 {0, O_RDONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
1162 {0, O_RDONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
1163 {0, O_RDONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
1164 {0, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_DOS,     A_0},
1165 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_DOS,     A_0},
1166 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_DOS,     A_0},
1167 {0, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_ALL,     A_0},
1168 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_ALL,     A_0},
1169 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_ALL,     A_0},
1170 {0, O_WRONLY,   DENY_ALL,      O_RDWR, DENY_WRITE,     A_0},
1171 {0, O_WRONLY,   DENY_ALL,    O_RDONLY, DENY_WRITE,     A_0},
1172 {0, O_WRONLY,   DENY_ALL,    O_WRONLY, DENY_WRITE,     A_0},
1173 {0, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_READ,     A_0},
1174 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_READ,     A_0},
1175 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_READ,     A_0},
1176 {0, O_WRONLY,   DENY_ALL,      O_RDWR,  DENY_NONE,     A_0},
1177 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,  DENY_NONE,     A_0},
1178 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,  DENY_NONE,     A_0},
1179 {0, O_WRONLY,   DENY_ALL,      O_RDWR,   DENY_FCB,     A_0},
1180 {0, O_WRONLY,   DENY_ALL,    O_RDONLY,   DENY_FCB,     A_0},
1181 {0, O_WRONLY,   DENY_ALL,    O_WRONLY,   DENY_FCB,     A_0},
1182 {0,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
1183 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_0},
1184 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
1185 {0,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
1186 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
1187 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
1188 {0,   O_RDWR, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
1189 {0,   O_RDWR, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
1190 {0,   O_RDWR, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
1191 {0,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
1192 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
1193 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
1194 {0,   O_RDWR, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
1195 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
1196 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
1197 {0,   O_RDWR, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
1198 {0,   O_RDWR, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
1199 {0,   O_RDWR, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
1200 {0, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
1201 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_R},
1202 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
1203 {0, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
1204 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
1205 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
1206 {0, O_RDONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
1207 {0, O_RDONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_R},
1208 {0, O_RDONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
1209 {0, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
1210 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_0},
1211 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
1212 {0, O_RDONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
1213 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
1214 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
1215 {0, O_RDONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
1216 {0, O_RDONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
1217 {0, O_RDONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
1218 {0, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_DOS,     A_0},
1219 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_DOS,     A_0},
1220 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_DOS,     A_0},
1221 {0, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_ALL,     A_0},
1222 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_ALL,     A_0},
1223 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_ALL,     A_0},
1224 {0, O_WRONLY, DENY_WRITE,      O_RDWR, DENY_WRITE,     A_0},
1225 {0, O_WRONLY, DENY_WRITE,    O_RDONLY, DENY_WRITE,     A_0},
1226 {0, O_WRONLY, DENY_WRITE,    O_WRONLY, DENY_WRITE,     A_0},
1227 {0, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_READ,     A_0},
1228 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_READ,     A_R},
1229 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_READ,     A_0},
1230 {0, O_WRONLY, DENY_WRITE,      O_RDWR,  DENY_NONE,     A_0},
1231 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,  DENY_NONE,     A_R},
1232 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,  DENY_NONE,     A_0},
1233 {0, O_WRONLY, DENY_WRITE,      O_RDWR,   DENY_FCB,     A_0},
1234 {0, O_WRONLY, DENY_WRITE,    O_RDONLY,   DENY_FCB,     A_0},
1235 {0, O_WRONLY, DENY_WRITE,    O_WRONLY,   DENY_FCB,     A_0},
1236 {0,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
1237 {0,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
1238 {0,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_0},
1239 {0,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
1240 {0,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
1241 {0,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
1242 {0,   O_RDWR,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
1243 {0,   O_RDWR,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
1244 {0,   O_RDWR,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
1245 {0,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
1246 {0,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
1247 {0,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
1248 {0,   O_RDWR,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
1249 {0,   O_RDWR,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
1250 {0,   O_RDWR,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
1251 {0,   O_RDWR,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
1252 {0,   O_RDWR,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
1253 {0,   O_RDWR,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
1254 {0, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
1255 {0, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
1256 {0, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_0},
1257 {0, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
1258 {0, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
1259 {0, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
1260 {0, O_RDONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
1261 {0, O_RDONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
1262 {0, O_RDONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_W},
1263 {0, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
1264 {0, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
1265 {0, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_0},
1266 {0, O_RDONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
1267 {0, O_RDONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
1268 {0, O_RDONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
1269 {0, O_RDONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
1270 {0, O_RDONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
1271 {0, O_RDONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
1272 {0, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_DOS,     A_0},
1273 {0, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_DOS,     A_0},
1274 {0, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_DOS,     A_0},
1275 {0, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_ALL,     A_0},
1276 {0, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_ALL,     A_0},
1277 {0, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_ALL,     A_0},
1278 {0, O_WRONLY,  DENY_READ,      O_RDWR, DENY_WRITE,     A_0},
1279 {0, O_WRONLY,  DENY_READ,    O_RDONLY, DENY_WRITE,     A_0},
1280 {0, O_WRONLY,  DENY_READ,    O_WRONLY, DENY_WRITE,     A_0},
1281 {0, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_READ,     A_0},
1282 {0, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_READ,     A_0},
1283 {0, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_READ,     A_W},
1284 {0, O_WRONLY,  DENY_READ,      O_RDWR,  DENY_NONE,     A_0},
1285 {0, O_WRONLY,  DENY_READ,    O_RDONLY,  DENY_NONE,     A_0},
1286 {0, O_WRONLY,  DENY_READ,    O_WRONLY,  DENY_NONE,     A_W},
1287 {0, O_WRONLY,  DENY_READ,      O_RDWR,   DENY_FCB,     A_0},
1288 {0, O_WRONLY,  DENY_READ,    O_RDONLY,   DENY_FCB,     A_0},
1289 {0, O_WRONLY,  DENY_READ,    O_WRONLY,   DENY_FCB,     A_0},
1290 {0,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_0},
1291 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_0},
1292 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_0},
1293 {0,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
1294 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
1295 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
1296 {0,   O_RDWR,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
1297 {0,   O_RDWR,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
1298 {0,   O_RDWR,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
1299 {0,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
1300 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
1301 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
1302 {0,   O_RDWR,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
1303 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
1304 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
1305 {0,   O_RDWR,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
1306 {0,   O_RDWR,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
1307 {0,   O_RDWR,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
1308 {0, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_0},
1309 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_R},
1310 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_0},
1311 {0, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
1312 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
1313 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
1314 {0, O_RDONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_RW},
1315 {0, O_RDONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_R},
1316 {0, O_RDONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_W},
1317 {0, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_0},
1318 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_0},
1319 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_0},
1320 {0, O_RDONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
1321 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
1322 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
1323 {0, O_RDONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
1324 {0, O_RDONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
1325 {0, O_RDONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
1326 {0, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_DOS,     A_0},
1327 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_DOS,     A_0},
1328 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_DOS,     A_0},
1329 {0, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_ALL,     A_0},
1330 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_ALL,     A_0},
1331 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_ALL,     A_0},
1332 {0, O_WRONLY,  DENY_NONE,      O_RDWR, DENY_WRITE,     A_0},
1333 {0, O_WRONLY,  DENY_NONE,    O_RDONLY, DENY_WRITE,     A_0},
1334 {0, O_WRONLY,  DENY_NONE,    O_WRONLY, DENY_WRITE,     A_0},
1335 {0, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_READ,     A_RW},
1336 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_READ,     A_R},
1337 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_READ,     A_W},
1338 {0, O_WRONLY,  DENY_NONE,      O_RDWR,  DENY_NONE,     A_RW},
1339 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,  DENY_NONE,     A_R},
1340 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,  DENY_NONE,     A_W},
1341 {0, O_WRONLY,  DENY_NONE,      O_RDWR,   DENY_FCB,     A_0},
1342 {0, O_WRONLY,  DENY_NONE,    O_RDONLY,   DENY_FCB,     A_0},
1343 {0, O_WRONLY,  DENY_NONE,    O_WRONLY,   DENY_FCB,     A_0},
1344 {0,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_RW},
1345 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_R},
1346 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_W},
1347 {0,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
1348 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
1349 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
1350 {0,   O_RDWR,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
1351 {0,   O_RDWR,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
1352 {0,   O_RDWR,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
1353 {0,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
1354 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
1355 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
1356 {0,   O_RDWR,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
1357 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
1358 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
1359 {0,   O_RDWR,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_RW},
1360 {0,   O_RDWR,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_RW},
1361 {0,   O_RDWR,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_RW},
1362 {0, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_RW},
1363 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_R},
1364 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_W},
1365 {0, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
1366 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
1367 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
1368 {0, O_RDONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
1369 {0, O_RDONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
1370 {0, O_RDONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
1371 {0, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
1372 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
1373 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
1374 {0, O_RDONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
1375 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
1376 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
1377 {0, O_RDONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_RW},
1378 {0, O_RDONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_RW},
1379 {0, O_RDONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_RW},
1380 {0, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_DOS,     A_RW},
1381 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_DOS,     A_R},
1382 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_DOS,     A_W},
1383 {0, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_ALL,     A_0},
1384 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_ALL,     A_0},
1385 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_ALL,     A_0},
1386 {0, O_WRONLY,   DENY_FCB,      O_RDWR, DENY_WRITE,     A_0},
1387 {0, O_WRONLY,   DENY_FCB,    O_RDONLY, DENY_WRITE,     A_0},
1388 {0, O_WRONLY,   DENY_FCB,    O_WRONLY, DENY_WRITE,     A_0},
1389 {0, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_READ,     A_0},
1390 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_READ,     A_0},
1391 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_READ,     A_0},
1392 {0, O_WRONLY,   DENY_FCB,      O_RDWR,  DENY_NONE,     A_0},
1393 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,  DENY_NONE,     A_0},
1394 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,  DENY_NONE,     A_0},
1395 {0, O_WRONLY,   DENY_FCB,      O_RDWR,   DENY_FCB,     A_RW},
1396 {0, O_WRONLY,   DENY_FCB,    O_RDONLY,   DENY_FCB,     A_RW},
1397 {0, O_WRONLY,   DENY_FCB,    O_WRONLY,   DENY_FCB,     A_RW}
1398 };
1399
1400
1401 static void progress_bar(uint_t i, uint_t total)
1402 {
1403         printf("%5d/%5d\r", i, total);
1404         fflush(stdout);
1405 }
1406
1407 /*
1408   this produces a matrix of deny mode behaviour for 1 connection
1409  */
1410 BOOL torture_denytest1(void)
1411 {
1412         static struct smbcli_state *cli1;
1413         int fnum1, fnum2;
1414         int i;
1415         BOOL correct = True;
1416         struct timeval tv, tv_start;
1417         const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"};
1418         int failures=0;
1419
1420         if (!torture_open_connection(&cli1)) {
1421                 return False;
1422         }
1423
1424         printf("starting denytest1\n");
1425
1426         printf("Testing deny modes with 1 connection\n");
1427
1428         for (i=0;i<2;i++) {
1429                 smbcli_unlink(cli1->tree, fnames[i]);
1430                 fnum1 = smbcli_open(cli1->tree, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
1431                 smbcli_write(cli1->tree, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
1432                 smbcli_close(cli1->tree, fnum1);
1433         }
1434
1435         printf("testing %d entries\n", ARRAY_SIZE(denytable1));
1436
1437         GetTimeOfDay(&tv_start);
1438
1439         for (i=0; i<ARRAY_SIZE(denytable1); i++) {
1440                 enum deny_result res;
1441                 const char *fname = fnames[denytable1[i].isexe];
1442
1443                 progress_bar(i, ARRAY_SIZE(denytable1));
1444
1445                 fnum1 = smbcli_open(cli1->tree, fname, 
1446                                  denytable1[i].mode1,
1447                                  denytable1[i].deny1);
1448                 fnum2 = smbcli_open(cli1->tree, fname, 
1449                                  denytable1[i].mode2,
1450                                  denytable1[i].deny2);
1451
1452                 if (fnum1 == -1) {
1453                         res = A_X;
1454                 } else if (fnum2 == -1) {
1455                         res = A_0;
1456                 } else {
1457                         uint8_t x = 1;
1458                         res = A_0;
1459                         if (smbcli_read(cli1->tree, fnum2, &x, 0, 1) == 1) {
1460                                 res += A_R;
1461                         }
1462                         if (smbcli_write(cli1->tree, fnum2, 0, &x, 0, 1) == 1) {
1463                                 res += A_W;
1464                         }
1465                 }
1466
1467                 if (torture_showall || res != denytable1[i].result) {
1468                         int64_t tdif;
1469                         GetTimeOfDay(&tv);
1470                         tdif = usec_time_diff(&tv, &tv_start);
1471                         tdif /= 1000;
1472                         printf("%lld: %s %8s %10s    %8s %10s    %s (correct=%s)\n",
1473                                tdif,
1474                                fname,
1475                                denystr(denytable1[i].deny1),
1476                                openstr(denytable1[i].mode1),
1477                                denystr(denytable1[i].deny2),
1478                                openstr(denytable1[i].mode2),
1479                                resultstr(res),
1480                                resultstr(denytable1[i].result));
1481                 }
1482
1483                 if (res != denytable1[i].result) {
1484                         correct = False;
1485                         CHECK_MAX_FAILURES(failed);
1486                 }
1487
1488                 smbcli_close(cli1->tree, fnum1);
1489                 smbcli_close(cli1->tree, fnum2);
1490         }
1491
1492 failed:
1493         for (i=0;i<2;i++) {
1494                 smbcli_unlink(cli1->tree, fnames[i]);
1495         }
1496                 
1497         if (!torture_close_connection(cli1)) {
1498                 correct = False;
1499         }
1500         
1501         printf("finshed denytest1 (%d failures)\n", failures);
1502         return correct;
1503 }
1504
1505
1506 /*
1507   this produces a matrix of deny mode behaviour with 2 connections
1508  */
1509 BOOL torture_denytest2(void)
1510 {
1511         static struct smbcli_state *cli1, *cli2;
1512         int fnum1, fnum2;
1513         int i;
1514         BOOL correct = True;
1515         const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
1516         struct timeval tv, tv_start;
1517         int failures=0;
1518
1519         if (!torture_open_connection(&cli1) || !torture_open_connection(&cli2)) {
1520                 return False;
1521         }
1522
1523         printf("starting denytest2\n");
1524
1525         printf("Testing deny modes with 2 connections\n");
1526
1527         for (i=0;i<2;i++) {
1528                 smbcli_unlink(cli1->tree, fnames[i]);
1529                 fnum1 = smbcli_open(cli1->tree, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
1530                 smbcli_write(cli1->tree, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
1531                 smbcli_close(cli1->tree, fnum1);
1532         }
1533
1534         GetTimeOfDay(&tv_start);
1535
1536         for (i=0; i<ARRAY_SIZE(denytable2); i++) {
1537                 enum deny_result res;
1538                 const char *fname = fnames[denytable2[i].isexe];
1539
1540                 progress_bar(i, ARRAY_SIZE(denytable1));
1541
1542                 fnum1 = smbcli_open(cli1->tree, fname, 
1543                                  denytable2[i].mode1,
1544                                  denytable2[i].deny1);
1545                 fnum2 = smbcli_open(cli2->tree, fname, 
1546                                  denytable2[i].mode2,
1547                                  denytable2[i].deny2);
1548
1549                 if (fnum1 == -1) {
1550                         res = A_X;
1551                 } else if (fnum2 == -1) {
1552                         res = A_0;
1553                 } else {
1554                         uint8_t x = 1;
1555                         res = A_0;
1556                         if (smbcli_read(cli2->tree, fnum2, &x, 0, 1) == 1) {
1557                                 res += A_R;
1558                         }
1559                         if (smbcli_write(cli2->tree, fnum2, 0, &x, 0, 1) == 1) {
1560                                 res += A_W;
1561                         }
1562                 }
1563
1564                 if (torture_showall || res != denytable2[i].result) {
1565                         int64_t tdif;
1566                         GetTimeOfDay(&tv);
1567                         tdif = usec_time_diff(&tv, &tv_start);
1568                         tdif /= 1000;
1569                         printf("%lld: %s %8s %10s    %8s %10s    %s (correct=%s)\n",
1570                                 tdif,
1571                                fname,
1572                                denystr(denytable2[i].deny1),
1573                                openstr(denytable2[i].mode1),
1574                                denystr(denytable2[i].deny2),
1575                                openstr(denytable2[i].mode2),
1576                                resultstr(res),
1577                                resultstr(denytable2[i].result));
1578                 }
1579
1580                 if (res != denytable2[i].result) {
1581                         correct = False;
1582                         CHECK_MAX_FAILURES(failed);
1583                 }
1584
1585                 smbcli_close(cli1->tree, fnum1);
1586                 smbcli_close(cli2->tree, fnum2);
1587         }
1588
1589 failed:         
1590         for (i=0;i<2;i++) {
1591                 smbcli_unlink(cli1->tree, fnames[i]);
1592         }
1593
1594         if (!torture_close_connection(cli1)) {
1595                 correct = False;
1596         }
1597         if (!torture_close_connection(cli2)) {
1598                 correct = False;
1599         }
1600         
1601         printf("finshed denytest2 (%d failures)\n", failures);
1602         return correct;
1603 }
1604
1605
1606
1607 /*
1608    simple test harness for playing with deny modes
1609  */
1610 BOOL torture_denytest3(void)
1611 {
1612         struct smbcli_state *cli1, *cli2;
1613         int fnum1, fnum2;
1614         const char *fname;
1615
1616         printf("starting deny3 test\n");
1617
1618         printf("Testing simple deny modes\n");
1619         
1620         if (!torture_open_connection(&cli1)) {
1621                 return False;
1622         }
1623         if (!torture_open_connection(&cli2)) {
1624                 return False;
1625         }
1626
1627         fname = "\\deny_dos1.dat";
1628
1629         smbcli_unlink(cli1->tree, fname);
1630         fnum1 = smbcli_open(cli1->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1631         fnum2 = smbcli_open(cli1->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1632         if (fnum1 != -1) smbcli_close(cli1->tree, fnum1);
1633         if (fnum2 != -1) smbcli_close(cli1->tree, fnum2);
1634         smbcli_unlink(cli1->tree, fname);
1635         printf("fnum1=%d fnum2=%d\n", fnum1, fnum2);
1636
1637
1638         fname = "\\deny_dos2.dat";
1639
1640         smbcli_unlink(cli1->tree, fname);
1641         fnum1 = smbcli_open(cli1->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1642         fnum2 = smbcli_open(cli2->tree, fname, O_CREAT|O_TRUNC|O_WRONLY, DENY_DOS);
1643         if (fnum1 != -1) smbcli_close(cli1->tree, fnum1);
1644         if (fnum2 != -1) smbcli_close(cli2->tree, fnum2);
1645         smbcli_unlink(cli1->tree, fname);
1646         printf("fnum1=%d fnum2=%d\n", fnum1, fnum2);
1647
1648
1649         torture_close_connection(cli1);
1650         torture_close_connection(cli2);
1651
1652         return True;
1653 }
1654
1655 struct bit_value {
1656         uint32_t value;
1657         const char *name;
1658 };
1659
1660 static uint32_t map_bits(const struct bit_value *bv, int b, int nbits)
1661 {
1662         int i;
1663         uint32_t ret = 0;
1664         for (i=0;i<nbits;i++) {
1665                 if (b & (1<<i)) {
1666                         ret |= bv[i].value;
1667                 }
1668         }
1669         return ret;
1670 }
1671
1672 static const char *bit_string(TALLOC_CTX *mem_ctx, const struct bit_value *bv, int b, int nbits)
1673 {
1674         char *ret = NULL;
1675         int i;
1676         for (i=0;i<nbits;i++) {
1677                 if (b & (1<<i)) {
1678                         if (ret == NULL) {
1679                                 ret = talloc_asprintf(mem_ctx, "%s", bv[i].name);
1680                         } else {
1681                                 ret = talloc_asprintf_append(ret, " | %s", bv[i].name);
1682                         }
1683                 }
1684         }
1685         if (ret == NULL) ret = talloc_strdup(mem_ctx, "(NONE)");
1686         return ret;
1687 }
1688
1689
1690 /*
1691   determine if two opens conflict
1692 */
1693 static NTSTATUS predict_share_conflict(uint32_t sa1, uint32_t am1, uint32_t sa2, uint32_t am2,
1694                                        uint16_t flags2, enum deny_result *res)
1695 {
1696 #define CHECK_MASK(am, sa, right, share) do { \
1697         if (((am) & (right)) && !((sa) & (share))) { \
1698                 *res = A_0; \
1699                 return NT_STATUS_SHARING_VIOLATION; \
1700         }} while (0)
1701
1702         *res = A_0;
1703         if (am2 & (SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA)) {
1704                 *res += A_W;
1705         }
1706         if (am2 & SEC_FILE_READ_DATA) {
1707                 *res += A_R;
1708         } else if ((am2 & SEC_FILE_EXECUTE) && 
1709                    (flags2 & FLAGS2_READ_PERMIT_EXECUTE)) {
1710                 *res += A_R;
1711         }
1712
1713         /* if either open involves no read.write or delete access then
1714            it can't conflict */
1715         if (!(am1 & (SEC_FILE_WRITE_DATA | 
1716                      SEC_FILE_APPEND_DATA |
1717                      SEC_FILE_READ_DATA | 
1718                      SEC_FILE_EXECUTE | 
1719                      SEC_STD_DELETE))) {
1720                 return NT_STATUS_OK;
1721         }
1722         if (!(am2 & (SEC_FILE_WRITE_DATA | 
1723                      SEC_FILE_APPEND_DATA |
1724                      SEC_FILE_READ_DATA | 
1725                      SEC_FILE_EXECUTE | 
1726                      SEC_STD_DELETE))) {
1727                 return NT_STATUS_OK;
1728         }
1729
1730         /* check the basic share access */
1731         CHECK_MASK(am1, sa2, 
1732                    SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA, 
1733                    NTCREATEX_SHARE_ACCESS_WRITE);
1734         CHECK_MASK(am2, sa1, 
1735                    SEC_FILE_WRITE_DATA | SEC_FILE_APPEND_DATA, 
1736                    NTCREATEX_SHARE_ACCESS_WRITE);
1737
1738         CHECK_MASK(am1, sa2, 
1739                    SEC_FILE_READ_DATA | SEC_FILE_EXECUTE, 
1740                    NTCREATEX_SHARE_ACCESS_READ);
1741         CHECK_MASK(am2, sa1, 
1742                    SEC_FILE_READ_DATA | SEC_FILE_EXECUTE, 
1743                    NTCREATEX_SHARE_ACCESS_READ);
1744
1745         CHECK_MASK(am1, sa2, 
1746                    SEC_STD_DELETE, 
1747                    NTCREATEX_SHARE_ACCESS_DELETE);
1748         CHECK_MASK(am2, sa1, 
1749                    SEC_STD_DELETE, 
1750                    NTCREATEX_SHARE_ACCESS_DELETE);
1751
1752         return NT_STATUS_OK;
1753 }
1754
1755 /*
1756   a denytest for ntcreatex
1757  */
1758 static BOOL torture_ntdenytest(struct smbcli_state *cli1, struct smbcli_state *cli2, int client)
1759 {
1760         const struct bit_value share_access_bits[] = {
1761                 { NTCREATEX_SHARE_ACCESS_READ,   "S_R" },
1762                 { NTCREATEX_SHARE_ACCESS_WRITE,  "S_W" },
1763                 { NTCREATEX_SHARE_ACCESS_DELETE, "S_D" }
1764         };
1765         const struct bit_value access_mask_bits[] = {
1766                 { SEC_FILE_READ_DATA,        "R_DATA" },
1767                 { SEC_FILE_WRITE_DATA,       "W_DATA" },
1768                 { SEC_FILE_READ_ATTRIBUTE,   "R_ATTR" },
1769                 { SEC_FILE_WRITE_ATTRIBUTE,  "W_ATTR" },
1770                 { SEC_FILE_READ_EA,          "R_EAS " },
1771                 { SEC_FILE_WRITE_EA,         "W_EAS " },
1772                 { SEC_FILE_APPEND_DATA,      "A_DATA" },
1773                 { SEC_FILE_EXECUTE,          "EXEC  " }
1774         };
1775         int fnum1;
1776         int i;
1777         BOOL correct = True;
1778         struct timeval tv, tv_start;
1779         const char *fname;
1780         int nbits1 = ARRAY_SIZE(share_access_bits);
1781         int nbits2 = ARRAY_SIZE(access_mask_bits);
1782         union smb_open io1, io2;
1783         extern int torture_numops;
1784         int failures = 0;
1785         uint8_t buf[1];
1786
1787         ZERO_STRUCT(buf);
1788
1789         fname = talloc_asprintf(cli1, "\\ntdeny_%d.dll", client);
1790
1791         smbcli_unlink(cli1->tree, fname);
1792         fnum1 = smbcli_open(cli1->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
1793         smbcli_write(cli1->tree, fnum1, 0, buf, 0, sizeof(buf));
1794         smbcli_close(cli1->tree, fnum1);
1795
1796         GetTimeOfDay(&tv_start);
1797
1798         io1.ntcreatex.level = RAW_OPEN_NTCREATEX;
1799         io1.ntcreatex.in.root_fid = 0;
1800         io1.ntcreatex.in.flags = NTCREATEX_FLAGS_EXTENDED;
1801         io1.ntcreatex.in.create_options = NTCREATEX_OPTIONS_NON_DIRECTORY_FILE;
1802         io1.ntcreatex.in.file_attr = 0;
1803         io1.ntcreatex.in.alloc_size = 0;
1804         io1.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;
1805         io1.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_IMPERSONATION;
1806         io1.ntcreatex.in.security_flags = 0;
1807         io1.ntcreatex.in.fname = fname;
1808         io2 = io1;
1809
1810         printf("testing %d entries on %s\n", torture_numops, fname);
1811
1812         for (i=0;i<torture_numops;i++) {
1813                 NTSTATUS status1, status2, status2_p;
1814                 int64_t tdif;
1815                 TALLOC_CTX *mem_ctx = talloc(NULL, 0);
1816                 enum deny_result res, res2;
1817                 int b_sa1 = random() & ((1<<nbits1)-1);
1818                 int b_am1 = random() & ((1<<nbits2)-1);
1819                 int b_sa2 = random() & ((1<<nbits1)-1);
1820                 int b_am2 = random() & ((1<<nbits2)-1);
1821
1822                 progress_bar(i, torture_numops);
1823                 
1824                 io1.ntcreatex.in.share_access = map_bits(share_access_bits, b_sa1, nbits1);
1825                 io1.ntcreatex.in.access_mask  = map_bits(access_mask_bits,  b_am1, nbits2);
1826                 
1827                 io2.ntcreatex.in.share_access = map_bits(share_access_bits, b_sa2, nbits1);
1828                 io2.ntcreatex.in.access_mask  = map_bits(access_mask_bits,  b_am2, nbits2);
1829
1830                 status1 = smb_raw_open(cli1->tree, mem_ctx, &io1);
1831                 status2 = smb_raw_open(cli2->tree, mem_ctx, &io2);
1832
1833                 if (random() % 2 == 0) {
1834                         cli2->tree->session->flags2 |= FLAGS2_READ_PERMIT_EXECUTE;
1835                 } else {
1836                         cli2->tree->session->flags2 &= ~FLAGS2_READ_PERMIT_EXECUTE;
1837                 }
1838                 
1839                 if (!NT_STATUS_IS_OK(status1)) {
1840                         res = A_X;
1841                 } else if (!NT_STATUS_IS_OK(status2)) {
1842                         res = A_0;
1843                 } else {
1844                         res = A_0;
1845                         if (smbcli_read(cli2->tree, 
1846                                         io2.ntcreatex.out.fnum, buf, 0, sizeof(buf)) >= 1) {
1847                                 res += A_R;
1848                         }
1849                         if (smbcli_write(cli2->tree, 
1850                                          io2.ntcreatex.out.fnum, 0, buf, 0, sizeof(buf)) >= 1) {
1851                                 res += A_W;
1852                         }
1853                 }
1854                 
1855                 if (NT_STATUS_IS_OK(status1)) {
1856                         smbcli_close(cli1->tree, io1.ntcreatex.out.fnum);
1857                 }
1858                 if (NT_STATUS_IS_OK(status2)) {
1859                         smbcli_close(cli2->tree, io2.ntcreatex.out.fnum);
1860                 }
1861                 
1862                 status2_p = predict_share_conflict(io1.ntcreatex.in.share_access,
1863                                                    io1.ntcreatex.in.access_mask,
1864                                                    io2.ntcreatex.in.share_access,
1865                                                    io2.ntcreatex.in.access_mask, 
1866                                                    cli2->tree->session->flags2,
1867                                                    &res2);
1868                 
1869                 GetTimeOfDay(&tv);
1870                 tdif = usec_time_diff(&tv, &tv_start);
1871                 tdif /= 1000;
1872                 if (torture_showall || 
1873                     !NT_STATUS_EQUAL(status2, status2_p) ||
1874                     res != res2) {
1875                         printf("\n%-20s %-70s\n%-20s %-70s %4s %4s  %s/%s\n",
1876                                bit_string(mem_ctx, share_access_bits, b_sa1, nbits1),
1877                                bit_string(mem_ctx, access_mask_bits,  b_am1, nbits2),
1878                                bit_string(mem_ctx, share_access_bits, b_sa2, nbits1),
1879                                bit_string(mem_ctx, access_mask_bits,  b_am2, nbits2),
1880                                resultstr(res),
1881                                resultstr(res2),
1882                                nt_errstr(status2),
1883                                nt_errstr(status2_p));
1884                         fflush(stdout);
1885                 }
1886                 
1887                 if (res != res2 ||
1888                     !NT_STATUS_EQUAL(status2, status2_p)) {
1889                         CHECK_MAX_FAILURES(failed);
1890                         correct = False;
1891                 }
1892                 
1893                 talloc_free(mem_ctx);
1894         }
1895
1896 failed:
1897         smbcli_unlink(cli1->tree, fname);
1898         
1899         printf("finshed ntdenytest (%d failures)\n", failures);
1900         return correct;
1901 }
1902
1903
1904
1905 /*
1906   a denytest for ntcreatex
1907  */
1908 BOOL torture_ntdenytest1(struct smbcli_state *cli, int client)
1909 {
1910         extern int torture_seed;
1911
1912         srandom(torture_seed + client);
1913
1914         printf("starting ntdenytest1 client %d\n", client);
1915
1916         return torture_ntdenytest(cli, cli, client);
1917 }
1918
1919 /*
1920   a denytest for ntcreatex
1921  */
1922 BOOL torture_ntdenytest2(void)
1923 {
1924         struct smbcli_state *cli1, *cli2;
1925         BOOL ret;
1926
1927         if (!torture_open_connection(&cli1)) {
1928                 return False;
1929         }
1930
1931         if (!torture_open_connection(&cli2)) {
1932                 return False;
1933         }
1934
1935         printf("starting ntdenytest2\n");
1936
1937         ret = torture_ntdenytest(cli1, cli2, 0);
1938
1939         torture_close_connection(cli1);
1940         torture_close_connection(cli2);
1941
1942         return ret;
1943 }
1944
1945
1946 #define CHECK_STATUS(status, correct) do { \
1947         if (!NT_STATUS_EQUAL(status, correct)) { \
1948                 printf("(%s) Incorrect status %s - should be %s\n", \
1949                        __location__, nt_errstr(status), nt_errstr(correct)); \
1950                 ret = False; \
1951                 goto done; \
1952         }} while (0)
1953
1954 #define CHECK_VAL(v, correct) do { \
1955         if ((v) != (correct)) { \
1956                 printf("(%s) wrong value for %s  0x%x - should be 0x%x\n", \
1957                        __location__, #v, (int)(v), (int)correct); \
1958                 ret = False; \
1959         }} while (0)
1960
1961 /*
1962   test sharing of handles with DENY_DOS on a single connection
1963 */
1964 BOOL torture_denydos_sharing(void)
1965 {
1966         struct smbcli_state *cli;
1967         union smb_open io;
1968         union smb_fileinfo finfo;
1969         const char *fname = "\\torture_denydos.txt";
1970         NTSTATUS status;
1971         int fnum1 = -1, fnum2 = -1;
1972         BOOL ret = True;
1973         union smb_setfileinfo sfinfo;
1974         TALLOC_CTX *mem_ctx;
1975
1976         if (!torture_open_connection(&cli)) {
1977                 return False;
1978         }
1979
1980         mem_ctx = talloc(cli, 0);
1981
1982         printf("Checking DENY_DOS shared handle semantics\n");
1983         smbcli_unlink(cli->tree, fname);
1984
1985         io.openx.level = RAW_OPEN_OPENX;
1986         io.openx.in.fname = fname;
1987         io.openx.in.flags = OPENX_FLAGS_ADDITIONAL_INFO;
1988         io.openx.in.open_mode = OPENX_MODE_ACCESS_RDWR | OPENX_MODE_DENY_DOS;
1989         io.openx.in.open_func = OPENX_OPEN_FUNC_OPEN | OPENX_OPEN_FUNC_CREATE;
1990         io.openx.in.search_attrs = 0;
1991         io.openx.in.file_attrs = 0;
1992         io.openx.in.write_time = 0;
1993         io.openx.in.size = 0;
1994         io.openx.in.timeout = 0;
1995
1996         printf("openx twice with RDWR/DENY_DOS\n");
1997         status = smb_raw_open(cli->tree, mem_ctx, &io);
1998         CHECK_STATUS(status, NT_STATUS_OK);
1999         fnum1 = io.openx.out.fnum;
2000
2001         status = smb_raw_open(cli->tree, mem_ctx, &io);
2002         CHECK_STATUS(status, NT_STATUS_OK);
2003         fnum2 = io.openx.out.fnum;
2004
2005         printf("fnum1=%d fnum2=%d\n", fnum1, fnum2);
2006
2007         sfinfo.generic.level = RAW_SFILEINFO_POSITION_INFORMATION;
2008         sfinfo.position_information.file.fnum = fnum1;
2009         sfinfo.position_information.in.position = 1000;
2010         status = smb_raw_setfileinfo(cli->tree, &sfinfo);
2011         CHECK_STATUS(status, NT_STATUS_OK);
2012
2013         printf("two handles should be same file handle\n");
2014         finfo.position_information.level = RAW_FILEINFO_POSITION_INFORMATION;
2015         finfo.position_information.in.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.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, 1000);
2024
2025
2026         smbcli_close(cli->tree, fnum1);
2027         smbcli_close(cli->tree, fnum2);
2028
2029         printf("openx twice with RDWR/DENY_NONE\n");
2030         io.openx.in.open_mode = OPENX_MODE_ACCESS_RDWR | OPENX_MODE_DENY_NONE;
2031         status = smb_raw_open(cli->tree, mem_ctx, &io);
2032         CHECK_STATUS(status, NT_STATUS_OK);
2033         fnum1 = io.openx.out.fnum;
2034
2035         io.openx.in.open_func = OPENX_OPEN_FUNC_OPEN;
2036         status = smb_raw_open(cli->tree, mem_ctx, &io);
2037         CHECK_STATUS(status, NT_STATUS_OK);
2038         fnum2 = io.openx.out.fnum;
2039
2040         printf("fnum1=%d fnum2=%d\n", fnum1, fnum2);
2041
2042         printf("two handles should be separate\n");
2043         sfinfo.generic.level = RAW_SFILEINFO_POSITION_INFORMATION;
2044         sfinfo.position_information.file.fnum = fnum1;
2045         sfinfo.position_information.in.position = 1000;
2046         status = smb_raw_setfileinfo(cli->tree, &sfinfo);
2047         CHECK_STATUS(status, NT_STATUS_OK);
2048
2049         finfo.position_information.level = RAW_FILEINFO_POSITION_INFORMATION;
2050         finfo.position_information.in.fnum = fnum1;
2051         status = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo);
2052         CHECK_STATUS(status, NT_STATUS_OK);
2053         CHECK_VAL(finfo.position_information.out.position, 1000);
2054
2055         finfo.position_information.in.fnum = fnum2;
2056         status = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo);
2057         CHECK_STATUS(status, NT_STATUS_OK);
2058         CHECK_VAL(finfo.position_information.out.position, 0);
2059
2060 done:
2061         smbcli_close(cli->tree, fnum1);
2062         smbcli_close(cli->tree, fnum2);
2063         smbcli_unlink(cli->tree, fname);
2064
2065         return ret;
2066 }
2067
2068