2 Unix SMB/CIFS implementation.
3 SMB torture tester - deny mode scanning functions
4 Copyright (C) Andrew Tridgell 2001
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 #include "system/filesys.h"
22 #include "libcli/libcli.h"
23 #include "libcli/security/security.h"
24 #include "torture/util.h"
25 #include "cxd_known.h"
26 #include "torture/basic/proto.h"
28 extern int torture_failures
;
30 #define CHECK_MAX_FAILURES(label) do { if (++failures >= torture_failures) goto label; } while (0)
32 enum deny_result
{A_0
=0, A_X
=1, A_R
=2, A_W
=3, A_RW
=5};
34 static const char *denystr(int denymode
)
40 {DENY_DOS
, "DENY_DOS"},
41 {DENY_ALL
, "DENY_ALL"},
42 {DENY_WRITE
, "DENY_WRITE"},
43 {DENY_READ
, "DENY_READ"},
44 {DENY_NONE
, "DENY_NONE"},
45 {DENY_FCB
, "DENY_FCB"},
48 for (i
=0;deny_modes
[i
].name
;i
++) {
49 if (deny_modes
[i
].v
== denymode
) return deny_modes
[i
].name
;
54 static const char *openstr(int mode
)
61 {O_RDONLY
, "O_RDONLY"},
62 {O_WRONLY
, "O_WRONLY"},
65 for (i
=0;open_modes
[i
].name
;i
++) {
66 if (open_modes
[i
].v
== mode
) return open_modes
[i
].name
;
71 static const char *resultstr(enum deny_result res
)
83 for (i
=0;ARRAY_SIZE(results
);i
++) {
84 if (results
[i
].res
== res
) return results
[i
].name
;
93 enum deny_result result
;
95 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
96 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
97 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
98 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
99 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
100 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
101 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
102 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
103 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
104 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
105 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
106 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
107 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_RW
},
108 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
109 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_W
},
110 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
111 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
112 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
113 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
114 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
115 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
116 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
117 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
118 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
119 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_RW
},
120 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_R
},
121 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_W
},
122 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
123 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
124 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
125 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_RW
},
126 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
127 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_W
},
128 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
129 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
130 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
131 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
132 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
133 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
134 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
135 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
136 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
137 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
138 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
139 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
140 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_RW
},
141 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_R
},
142 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_W
},
143 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_RW
},
144 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
145 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_W
},
146 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
147 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
148 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
149 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
150 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
151 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
152 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
153 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
154 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
155 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
156 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
157 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
158 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
159 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
160 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
161 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
162 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
163 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
164 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
165 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
166 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
167 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
168 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
169 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
170 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
171 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
172 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
173 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
174 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
175 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
176 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
177 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
178 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
179 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
180 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
181 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
182 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
183 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
184 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
185 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
186 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
187 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
188 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
189 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
190 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
191 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
192 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
193 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
194 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
195 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
196 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
197 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
198 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
199 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
200 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
201 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
202 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
203 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
204 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
205 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
206 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
207 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
208 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
209 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
210 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
211 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
212 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
213 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
214 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
215 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
216 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
217 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
218 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
219 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
220 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
221 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
222 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
223 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
224 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
225 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
226 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
227 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
228 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_R
},
229 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
230 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
231 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
232 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
233 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
234 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
235 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
236 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
237 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
238 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
239 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
240 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
241 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
242 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
243 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
244 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
245 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
246 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
247 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
248 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
249 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_R
},
250 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
251 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
252 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
253 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
254 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
255 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
256 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
257 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
258 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
259 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_W
},
260 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
261 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
262 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
263 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
264 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
265 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
266 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
267 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
268 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
269 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
270 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
271 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
272 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
273 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
274 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
275 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
276 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
277 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_W
},
278 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
279 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
280 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
281 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
282 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
283 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_W
},
284 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
285 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
286 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
287 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
288 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
289 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
290 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
291 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
292 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
293 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
294 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
295 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_W
},
296 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
297 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
298 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
299 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
300 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
301 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
302 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
303 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
304 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_W
},
305 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
306 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
307 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
308 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
309 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
310 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
311 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_RW
},
312 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
313 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_W
},
314 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
315 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
316 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
317 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
318 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
319 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
320 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
321 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
322 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
323 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
324 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
325 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
326 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
327 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
328 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
329 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_RW
},
330 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
331 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_W
},
332 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
333 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
334 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
335 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_RW
},
336 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_R
},
337 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_W
},
338 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
339 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
340 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
341 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
342 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
343 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
344 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
345 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
346 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
347 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_RW
},
348 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
349 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_W
},
350 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
351 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
352 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
353 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
354 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
355 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
356 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_RW
},
357 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_R
},
358 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_W
},
359 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
360 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
361 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
362 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
363 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
364 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
365 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_0
},
366 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_0
},
367 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_0
},
368 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
369 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
370 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
371 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
372 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
373 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
374 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
375 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
376 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
377 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
378 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
379 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
380 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_0
},
381 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_0
},
382 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_0
},
383 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_0
},
384 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_0
},
385 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_0
},
386 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
387 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
388 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
389 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
390 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
391 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
392 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
393 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
394 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
395 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
396 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
397 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
398 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_0
},
399 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_0
},
400 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_0
},
401 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_0
},
402 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_0
},
403 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_0
},
404 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
405 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
406 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
407 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
408 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
409 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
410 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
411 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
412 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
413 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
414 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
415 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
416 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_0
},
417 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_0
},
418 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_0
},
419 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_0
},
420 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_0
},
421 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_0
},
422 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
423 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
424 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
425 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
426 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
427 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
428 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
429 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
430 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
431 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_0
},
432 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_0
},
433 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_0
},
434 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
435 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
436 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
437 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_0
},
438 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
439 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_0
},
440 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
441 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
442 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
443 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
444 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_R
},
445 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
446 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
447 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
448 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
449 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_0
},
450 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
451 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_0
},
452 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
453 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
454 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
455 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_0
},
456 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_0
},
457 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_0
},
458 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
459 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
460 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
461 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
462 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
463 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
464 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
465 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
466 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
467 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_0
},
468 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_0
},
469 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_0
},
470 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
471 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
472 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
473 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
474 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
475 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
476 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
477 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
478 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
479 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
480 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
481 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
482 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
483 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
484 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
485 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
486 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
487 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
488 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
489 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
490 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
491 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
492 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
493 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
494 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
495 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
496 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
497 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
498 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
499 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
500 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
501 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
502 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
503 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
504 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
505 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
506 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
507 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
508 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
509 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
510 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
511 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
512 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
513 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
514 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
515 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
516 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
517 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
518 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
519 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
520 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
521 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
522 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
523 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
524 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
525 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
526 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
527 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
528 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_0
},
529 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
530 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
531 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
532 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
533 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
534 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
535 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
536 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
537 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
538 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
539 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
540 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
541 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
542 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
543 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
544 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
545 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
546 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
547 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
548 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
549 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
550 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
551 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
552 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_R
},
553 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
554 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
555 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
556 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
557 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
558 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
559 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
560 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
561 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
562 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
563 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
564 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_0
},
565 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
566 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
567 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
568 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
569 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
570 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
571 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
572 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
573 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_R
},
574 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
575 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
576 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
577 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
578 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
579 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
580 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
581 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
582 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
583 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_0
},
584 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
585 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
586 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
587 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
588 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
589 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
590 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
591 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
592 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
593 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
594 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
595 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
596 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
597 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
598 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
599 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
600 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
601 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_0
},
602 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
603 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
604 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
605 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
606 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
607 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_W
},
608 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
609 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
610 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
611 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
612 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
613 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
614 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
615 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
616 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
617 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
618 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
619 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_0
},
620 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
621 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
622 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
623 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
624 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
625 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
626 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
627 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
628 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_W
},
629 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
630 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
631 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
632 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
633 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
634 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
635 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_0
},
636 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_0
},
637 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_0
},
638 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
639 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
640 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
641 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
642 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
643 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
644 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
645 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
646 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
647 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
648 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
649 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
650 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
651 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
652 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
653 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_0
},
654 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
655 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_0
},
656 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
657 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
658 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
659 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_RW
},
660 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_R
},
661 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_W
},
662 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
663 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
664 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
665 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
666 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
667 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
668 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
669 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
670 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
671 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_0
},
672 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_0
},
673 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_0
},
674 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
675 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
676 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
677 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
678 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
679 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
680 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_RW
},
681 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_R
},
682 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_W
},
683 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
684 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
685 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
686 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
687 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
688 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
689 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_0
},
690 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_0
},
691 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_0
},
692 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
693 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
694 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
695 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
696 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
697 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
698 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
699 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
700 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
701 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
702 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
703 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
704 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_0
},
705 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_0
},
706 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_0
},
707 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_0
},
708 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_0
},
709 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_0
},
710 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
711 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
712 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
713 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
714 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
715 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
716 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
717 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
718 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
719 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
720 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
721 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
722 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_0
},
723 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_0
},
724 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_0
},
725 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_0
},
726 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_0
},
727 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_0
},
728 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
729 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
730 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
731 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
732 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
733 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
734 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
735 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
736 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
737 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
738 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
739 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
740 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_0
},
741 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_0
},
742 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_0
}
746 static const struct {
750 enum deny_result result
;
752 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
753 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
754 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
755 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
756 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
757 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
758 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
759 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
760 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
761 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
762 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
763 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
764 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_RW
},
765 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
766 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_W
},
767 {1, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
768 {1, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
769 {1, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
770 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
771 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
772 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
773 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
774 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
775 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
776 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_RW
},
777 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_R
},
778 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_W
},
779 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
780 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
781 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
782 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_RW
},
783 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
784 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_W
},
785 {1, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
786 {1, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
787 {1, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
788 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
789 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
790 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
791 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
792 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
793 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
794 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
795 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
796 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
797 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_RW
},
798 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_R
},
799 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_W
},
800 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_RW
},
801 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
802 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_W
},
803 {1, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
804 {1, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
805 {1, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
806 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
807 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
808 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
809 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
810 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
811 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
812 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
813 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
814 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
815 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
816 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
817 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
818 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
819 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
820 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
821 {1, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
822 {1, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
823 {1, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
824 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
825 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
826 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
827 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
828 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
829 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
830 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
831 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
832 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
833 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
834 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
835 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
836 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
837 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
838 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
839 {1, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
840 {1, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
841 {1, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
842 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
843 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
844 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
845 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
846 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
847 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
848 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
849 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
850 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
851 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
852 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
853 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
854 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
855 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
856 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
857 {1, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
858 {1, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
859 {1, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
860 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
861 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
862 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
863 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
864 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
865 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
866 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
867 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
868 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
869 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
870 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
871 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
872 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
873 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
874 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
875 {1, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
876 {1, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
877 {1, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
878 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
879 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
880 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
881 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
882 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
883 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
884 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
885 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_R
},
886 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
887 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
888 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
889 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
890 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
891 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
892 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
893 {1, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
894 {1, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
895 {1, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
896 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
897 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
898 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
899 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
900 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
901 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
902 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
903 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
904 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
905 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
906 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_R
},
907 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
908 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
909 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
910 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
911 {1, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
912 {1, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
913 {1, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
914 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
915 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
916 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_W
},
917 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
918 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
919 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
920 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
921 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
922 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
923 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
924 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
925 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
926 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
927 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
928 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
929 {1, O_RDWR
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
930 {1, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
931 {1, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
932 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
933 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
934 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_W
},
935 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
936 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
937 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
938 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
939 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
940 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_W
},
941 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
942 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
943 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
944 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
945 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
946 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
947 {1, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
948 {1, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
949 {1, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
950 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
951 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
952 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_W
},
953 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
954 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
955 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
956 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
957 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
958 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
959 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
960 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
961 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_W
},
962 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
963 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
964 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
965 {1, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
966 {1, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
967 {1, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
968 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_RW
},
969 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
970 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_W
},
971 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
972 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
973 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
974 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
975 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
976 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
977 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
978 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
979 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
980 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
981 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
982 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
983 {1, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
984 {1, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
985 {1, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
986 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_RW
},
987 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
988 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_W
},
989 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
990 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
991 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
992 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_RW
},
993 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_R
},
994 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_W
},
995 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
996 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
997 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
998 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
999 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
1000 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
1001 {1, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
1002 {1, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
1003 {1, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
1004 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_RW
},
1005 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
1006 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_W
},
1007 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
1008 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
1009 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
1010 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
1011 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
1012 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
1013 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_RW
},
1014 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_R
},
1015 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_W
},
1016 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
1017 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
1018 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
1019 {1, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
1020 {1, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
1021 {1, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
1022 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_RW
},
1023 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_R
},
1024 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_W
},
1025 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
1026 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
1027 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
1028 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
1029 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
1030 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
1031 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
1032 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
1033 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
1034 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
1035 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
1036 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
1037 {1, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_RW
},
1038 {1, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_RW
},
1039 {1, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_RW
},
1040 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_RW
},
1041 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_R
},
1042 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_W
},
1043 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
1044 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
1045 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
1046 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
1047 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
1048 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
1049 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
1050 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
1051 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
1052 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
1053 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
1054 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
1055 {1, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_RW
},
1056 {1, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_RW
},
1057 {1, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_RW
},
1058 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_RW
},
1059 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_R
},
1060 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_W
},
1061 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
1062 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
1063 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
1064 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
1065 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
1066 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
1067 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
1068 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
1069 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
1070 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
1071 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
1072 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
1073 {1, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_RW
},
1074 {1, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_RW
},
1075 {1, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_RW
},
1076 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
1077 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
1078 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
1079 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
1080 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
1081 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
1082 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
1083 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
1084 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
1085 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
1086 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
1087 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
1088 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_0
},
1089 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_0
},
1090 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_0
},
1091 {0, O_RDWR
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_RW
},
1092 {0, O_RDWR
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_RW
},
1093 {0, O_RDWR
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_RW
},
1094 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_0
},
1095 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
1096 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_0
},
1097 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
1098 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
1099 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
1100 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
1101 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_R
},
1102 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
1103 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
1104 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
1105 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
1106 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_0
},
1107 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_R
},
1108 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_0
},
1109 {0, O_RDONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_0
},
1110 {0, O_RDONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_0
},
1111 {0, O_RDONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_0
},
1112 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_DOS
, A_RW
},
1113 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_DOS
, A_R
},
1114 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_DOS
, A_W
},
1115 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_ALL
, A_0
},
1116 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_ALL
, A_0
},
1117 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_ALL
, A_0
},
1118 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_WRITE
, A_0
},
1119 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_WRITE
, A_0
},
1120 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_WRITE
, A_0
},
1121 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_READ
, A_0
},
1122 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_READ
, A_0
},
1123 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_READ
, A_0
},
1124 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_NONE
, A_0
},
1125 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_NONE
, A_0
},
1126 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_NONE
, A_0
},
1127 {0, O_WRONLY
, DENY_DOS
, O_RDWR
, DENY_FCB
, A_RW
},
1128 {0, O_WRONLY
, DENY_DOS
, O_RDONLY
, DENY_FCB
, A_RW
},
1129 {0, O_WRONLY
, DENY_DOS
, O_WRONLY
, DENY_FCB
, A_RW
},
1130 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
1131 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
1132 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
1133 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
1134 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
1135 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
1136 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
1137 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
1138 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
1139 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
1140 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
1141 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
1142 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
1143 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
1144 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
1145 {0, O_RDWR
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
1146 {0, O_RDWR
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
1147 {0, O_RDWR
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
1148 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
1149 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
1150 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
1151 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
1152 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
1153 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
1154 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
1155 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
1156 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
1157 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
1158 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
1159 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
1160 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
1161 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
1162 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
1163 {0, O_RDONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
1164 {0, O_RDONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
1165 {0, O_RDONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
1166 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_DOS
, A_0
},
1167 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_DOS
, A_0
},
1168 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_DOS
, A_0
},
1169 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_ALL
, A_0
},
1170 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_ALL
, A_0
},
1171 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_ALL
, A_0
},
1172 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_WRITE
, A_0
},
1173 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_WRITE
, A_0
},
1174 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_WRITE
, A_0
},
1175 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_READ
, A_0
},
1176 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_READ
, A_0
},
1177 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_READ
, A_0
},
1178 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_NONE
, A_0
},
1179 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_NONE
, A_0
},
1180 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_NONE
, A_0
},
1181 {0, O_WRONLY
, DENY_ALL
, O_RDWR
, DENY_FCB
, A_0
},
1182 {0, O_WRONLY
, DENY_ALL
, O_RDONLY
, DENY_FCB
, A_0
},
1183 {0, O_WRONLY
, DENY_ALL
, O_WRONLY
, DENY_FCB
, A_0
},
1184 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
1185 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_0
},
1186 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
1187 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
1188 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
1189 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
1190 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
1191 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
1192 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
1193 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
1194 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
1195 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
1196 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
1197 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
1198 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
1199 {0, O_RDWR
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
1200 {0, O_RDWR
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
1201 {0, O_RDWR
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
1202 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
1203 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_R
},
1204 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
1205 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
1206 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
1207 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
1208 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
1209 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_R
},
1210 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
1211 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
1212 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_0
},
1213 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
1214 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
1215 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
1216 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
1217 {0, O_RDONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
1218 {0, O_RDONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
1219 {0, O_RDONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
1220 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_DOS
, A_0
},
1221 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_DOS
, A_0
},
1222 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_DOS
, A_0
},
1223 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_ALL
, A_0
},
1224 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_ALL
, A_0
},
1225 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_ALL
, A_0
},
1226 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_WRITE
, A_0
},
1227 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_WRITE
, A_0
},
1228 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_WRITE
, A_0
},
1229 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_READ
, A_0
},
1230 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_READ
, A_R
},
1231 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_READ
, A_0
},
1232 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_NONE
, A_0
},
1233 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_NONE
, A_R
},
1234 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_NONE
, A_0
},
1235 {0, O_WRONLY
, DENY_WRITE
, O_RDWR
, DENY_FCB
, A_0
},
1236 {0, O_WRONLY
, DENY_WRITE
, O_RDONLY
, DENY_FCB
, A_0
},
1237 {0, O_WRONLY
, DENY_WRITE
, O_WRONLY
, DENY_FCB
, A_0
},
1238 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
1239 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
1240 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_0
},
1241 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
1242 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
1243 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
1244 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
1245 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
1246 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
1247 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
1248 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
1249 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
1250 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
1251 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
1252 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
1253 {0, O_RDWR
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
1254 {0, O_RDWR
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
1255 {0, O_RDWR
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
1256 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
1257 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
1258 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_0
},
1259 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
1260 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
1261 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
1262 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
1263 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
1264 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_W
},
1265 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
1266 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
1267 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_0
},
1268 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
1269 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
1270 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
1271 {0, O_RDONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
1272 {0, O_RDONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
1273 {0, O_RDONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
1274 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_DOS
, A_0
},
1275 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_DOS
, A_0
},
1276 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_DOS
, A_0
},
1277 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_ALL
, A_0
},
1278 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_ALL
, A_0
},
1279 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_ALL
, A_0
},
1280 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_WRITE
, A_0
},
1281 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_WRITE
, A_0
},
1282 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_WRITE
, A_0
},
1283 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_READ
, A_0
},
1284 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_READ
, A_0
},
1285 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_READ
, A_W
},
1286 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_NONE
, A_0
},
1287 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_NONE
, A_0
},
1288 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_NONE
, A_W
},
1289 {0, O_WRONLY
, DENY_READ
, O_RDWR
, DENY_FCB
, A_0
},
1290 {0, O_WRONLY
, DENY_READ
, O_RDONLY
, DENY_FCB
, A_0
},
1291 {0, O_WRONLY
, DENY_READ
, O_WRONLY
, DENY_FCB
, A_0
},
1292 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_0
},
1293 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_0
},
1294 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_0
},
1295 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
1296 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
1297 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
1298 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
1299 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
1300 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
1301 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
1302 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
1303 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
1304 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
1305 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
1306 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
1307 {0, O_RDWR
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
1308 {0, O_RDWR
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
1309 {0, O_RDWR
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
1310 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_0
},
1311 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_R
},
1312 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_0
},
1313 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
1314 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
1315 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
1316 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_RW
},
1317 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_R
},
1318 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_W
},
1319 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_0
},
1320 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_0
},
1321 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_0
},
1322 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
1323 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
1324 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
1325 {0, O_RDONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
1326 {0, O_RDONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
1327 {0, O_RDONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
1328 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_DOS
, A_0
},
1329 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_DOS
, A_0
},
1330 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_DOS
, A_0
},
1331 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_ALL
, A_0
},
1332 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_ALL
, A_0
},
1333 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_ALL
, A_0
},
1334 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_WRITE
, A_0
},
1335 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_WRITE
, A_0
},
1336 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_WRITE
, A_0
},
1337 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_READ
, A_RW
},
1338 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_READ
, A_R
},
1339 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_READ
, A_W
},
1340 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_NONE
, A_RW
},
1341 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_NONE
, A_R
},
1342 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_NONE
, A_W
},
1343 {0, O_WRONLY
, DENY_NONE
, O_RDWR
, DENY_FCB
, A_0
},
1344 {0, O_WRONLY
, DENY_NONE
, O_RDONLY
, DENY_FCB
, A_0
},
1345 {0, O_WRONLY
, DENY_NONE
, O_WRONLY
, DENY_FCB
, A_0
},
1346 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_RW
},
1347 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_R
},
1348 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_W
},
1349 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
1350 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
1351 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
1352 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
1353 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
1354 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
1355 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
1356 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
1357 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
1358 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
1359 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
1360 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
1361 {0, O_RDWR
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_RW
},
1362 {0, O_RDWR
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_RW
},
1363 {0, O_RDWR
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_RW
},
1364 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_RW
},
1365 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_R
},
1366 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_W
},
1367 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
1368 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
1369 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
1370 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
1371 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
1372 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
1373 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
1374 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
1375 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
1376 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
1377 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
1378 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
1379 {0, O_RDONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_RW
},
1380 {0, O_RDONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_RW
},
1381 {0, O_RDONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_RW
},
1382 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_DOS
, A_RW
},
1383 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_DOS
, A_R
},
1384 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_DOS
, A_W
},
1385 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_ALL
, A_0
},
1386 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_ALL
, A_0
},
1387 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_ALL
, A_0
},
1388 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_WRITE
, A_0
},
1389 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_WRITE
, A_0
},
1390 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_WRITE
, A_0
},
1391 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_READ
, A_0
},
1392 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_READ
, A_0
},
1393 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_READ
, A_0
},
1394 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_NONE
, A_0
},
1395 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_NONE
, A_0
},
1396 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_NONE
, A_0
},
1397 {0, O_WRONLY
, DENY_FCB
, O_RDWR
, DENY_FCB
, A_RW
},
1398 {0, O_WRONLY
, DENY_FCB
, O_RDONLY
, DENY_FCB
, A_RW
},
1399 {0, O_WRONLY
, DENY_FCB
, O_WRONLY
, DENY_FCB
, A_RW
}
1403 static void progress_bar(struct torture_context
*tctx
, unsigned int i
, unsigned int total
)
1405 if (torture_setting_bool(tctx
, "progress", true)) {
1406 torture_comment(tctx
, "%5d/%5d\r", i
, total
);
1412 this produces a matrix of deny mode behaviour for 1 connection
1414 bool torture_denytest1(struct torture_context
*tctx
,
1415 struct smbcli_state
*cli1
)
1419 bool correct
= true;
1420 struct timespec tv
, tv_start
;
1421 const char *fnames
[2] = {"\\denytest1.dat", "\\denytest1.exe"};
1424 torture_comment(tctx
, "Testing deny modes with 1 connection\n");
1427 smbcli_unlink(cli1
->tree
, fnames
[i
]);
1428 fnum1
= smbcli_open(cli1
->tree
, fnames
[i
], O_RDWR
|O_CREAT
, DENY_NONE
);
1429 smbcli_write(cli1
->tree
, fnum1
, 0, fnames
[i
], 0, strlen(fnames
[i
]));
1430 smbcli_close(cli1
->tree
, fnum1
);
1433 torture_comment(tctx
, "Testing %d entries\n", (int)ARRAY_SIZE(denytable1
));
1435 clock_gettime_mono(&tv_start
);
1437 for (i
=0; i
<ARRAY_SIZE(denytable1
); i
++) {
1438 enum deny_result res
;
1439 const char *fname
= fnames
[denytable1
[i
].isexe
];
1441 progress_bar(tctx
, i
, ARRAY_SIZE(denytable1
));
1443 if (!torture_setting_bool(tctx
, "deny_fcb_support", true) &&
1444 (denytable1
[i
].deny1
== DENY_FCB
||
1445 denytable1
[i
].deny2
== DENY_FCB
))
1448 if (!torture_setting_bool(tctx
, "deny_dos_support", true) &&
1449 (denytable1
[i
].deny1
== DENY_DOS
||
1450 denytable1
[i
].deny2
== DENY_DOS
))
1453 fnum1
= smbcli_open(cli1
->tree
, fname
,
1454 denytable1
[i
].mode1
,
1455 denytable1
[i
].deny1
);
1456 fnum2
= smbcli_open(cli1
->tree
, fname
,
1457 denytable1
[i
].mode2
,
1458 denytable1
[i
].deny2
);
1462 } else if (fnum2
== -1) {
1467 if (smbcli_read(cli1
->tree
, fnum2
, &x
, 0, 1) == 1) {
1470 if (smbcli_write(cli1
->tree
, fnum2
, 0, &x
, 0, 1) == 1) {
1475 if (torture_setting_bool(tctx
, "showall", false) ||
1476 res
!= denytable1
[i
].result
) {
1478 clock_gettime_mono(&tv
);
1479 tdif
= nsec_time_diff(&tv
, &tv_start
);
1481 torture_comment(tctx
, "%lld: %s %8s %10s %8s %10s %s (correct=%s)\n",
1484 denystr(denytable1
[i
].deny1
),
1485 openstr(denytable1
[i
].mode1
),
1486 denystr(denytable1
[i
].deny2
),
1487 openstr(denytable1
[i
].mode2
),
1489 resultstr(denytable1
[i
].result
));
1492 if (res
!= denytable1
[i
].result
) {
1494 CHECK_MAX_FAILURES(failed
);
1497 smbcli_close(cli1
->tree
, fnum1
);
1498 smbcli_close(cli1
->tree
, fnum2
);
1503 smbcli_unlink(cli1
->tree
, fnames
[i
]);
1506 torture_comment(tctx
, "finshed denytest1 (%d failures)\n", failures
);
1512 this produces a matrix of deny mode behaviour with 2 connections
1514 bool torture_denytest2(struct torture_context
*tctx
,
1515 struct smbcli_state
*cli1
,
1516 struct smbcli_state
*cli2
)
1520 bool correct
= true;
1521 const char *fnames
[2] = {"\\denytest2.dat", "\\denytest2.exe"};
1522 struct timespec tv
, tv_start
;
1526 smbcli_unlink(cli1
->tree
, fnames
[i
]);
1527 fnum1
= smbcli_open(cli1
->tree
, fnames
[i
], O_RDWR
|O_CREAT
, DENY_NONE
);
1528 smbcli_write(cli1
->tree
, fnum1
, 0, fnames
[i
], 0, strlen(fnames
[i
]));
1529 smbcli_close(cli1
->tree
, fnum1
);
1532 clock_gettime_mono(&tv_start
);
1534 for (i
=0; i
<ARRAY_SIZE(denytable2
); i
++) {
1535 enum deny_result res
;
1536 const char *fname
= fnames
[denytable2
[i
].isexe
];
1538 progress_bar(tctx
, i
, ARRAY_SIZE(denytable1
));
1540 if (!torture_setting_bool(tctx
, "deny_fcb_support", true) &&
1541 (denytable1
[i
].deny1
== DENY_FCB
||
1542 denytable1
[i
].deny2
== DENY_FCB
))
1545 if (!torture_setting_bool(tctx
, "deny_dos_support", true) &&
1546 (denytable1
[i
].deny1
== DENY_DOS
||
1547 denytable1
[i
].deny2
== DENY_DOS
))
1550 fnum1
= smbcli_open(cli1
->tree
, fname
,
1551 denytable2
[i
].mode1
,
1552 denytable2
[i
].deny1
);
1553 fnum2
= smbcli_open(cli2
->tree
, fname
,
1554 denytable2
[i
].mode2
,
1555 denytable2
[i
].deny2
);
1559 } else if (fnum2
== -1) {
1564 if (smbcli_read(cli2
->tree
, fnum2
, &x
, 0, 1) == 1) {
1567 if (smbcli_write(cli2
->tree
, fnum2
, 0, &x
, 0, 1) == 1) {
1572 if (torture_setting_bool(tctx
, "showall", false) ||
1573 res
!= denytable2
[i
].result
) {
1575 clock_gettime_mono(&tv
);
1576 tdif
= nsec_time_diff(&tv
, &tv_start
);
1578 torture_comment(tctx
, "%lld: %s %8s %10s %8s %10s %s (correct=%s)\n",
1581 denystr(denytable2
[i
].deny1
),
1582 openstr(denytable2
[i
].mode1
),
1583 denystr(denytable2
[i
].deny2
),
1584 openstr(denytable2
[i
].mode2
),
1586 resultstr(denytable2
[i
].result
));
1589 if (res
!= denytable2
[i
].result
) {
1591 CHECK_MAX_FAILURES(failed
);
1594 smbcli_close(cli1
->tree
, fnum1
);
1595 smbcli_close(cli2
->tree
, fnum2
);
1600 smbcli_unlink(cli1
->tree
, fnames
[i
]);
1603 torture_comment(tctx
, "finshed denytest2 (%d failures)\n", failures
);
1610 simple test harness for playing with deny modes
1612 bool torture_denytest3(struct torture_context
*tctx
,
1613 struct smbcli_state
*cli1
,
1614 struct smbcli_state
*cli2
)
1619 fname
= "\\deny_dos1.dat";
1621 smbcli_unlink(cli1
->tree
, fname
);
1622 fnum1
= smbcli_open(cli1
->tree
, fname
, O_CREAT
|O_TRUNC
|O_WRONLY
, DENY_DOS
);
1623 fnum2
= smbcli_open(cli1
->tree
, fname
, O_CREAT
|O_TRUNC
|O_WRONLY
, DENY_DOS
);
1624 if (fnum1
!= -1) smbcli_close(cli1
->tree
, fnum1
);
1625 if (fnum2
!= -1) smbcli_close(cli1
->tree
, fnum2
);
1626 smbcli_unlink(cli1
->tree
, fname
);
1627 torture_comment(tctx
, "fnum1=%d fnum2=%d\n", fnum1
, fnum2
);
1630 fname
= "\\deny_dos2.dat";
1632 smbcli_unlink(cli1
->tree
, fname
);
1633 fnum1
= smbcli_open(cli1
->tree
, fname
, O_CREAT
|O_TRUNC
|O_WRONLY
, DENY_DOS
);
1634 fnum2
= smbcli_open(cli2
->tree
, fname
, O_CREAT
|O_TRUNC
|O_WRONLY
, DENY_DOS
);
1635 if (fnum1
!= -1) smbcli_close(cli1
->tree
, fnum1
);
1636 if (fnum2
!= -1) smbcli_close(cli2
->tree
, fnum2
);
1637 smbcli_unlink(cli1
->tree
, fname
);
1638 torture_comment(tctx
, "fnum1=%d fnum2=%d\n", fnum1
, fnum2
);
1648 static uint32_t map_bits(const struct bit_value
*bv
, int b
, int nbits
)
1652 for (i
=0;i
<nbits
;i
++) {
1660 static const char *bit_string(TALLOC_CTX
*mem_ctx
, const struct bit_value
*bv
, int b
, int nbits
)
1664 for (i
=0;i
<nbits
;i
++) {
1667 ret
= talloc_asprintf(mem_ctx
, "%s", bv
[i
].name
);
1669 ret
= talloc_asprintf_append_buffer(ret
, " | %s", bv
[i
].name
);
1673 if (ret
== NULL
) ret
= talloc_strdup(mem_ctx
, "(NONE)");
1679 determine if two opens conflict
1681 static NTSTATUS
predict_share_conflict(uint32_t sa1
, uint32_t am1
, uint32_t sa2
, uint32_t am2
,
1682 bool read_for_execute
, enum deny_result
*res
)
1684 #define CHECK_MASK(am, sa, right, share) do { \
1685 if (((am) & (right)) && !((sa) & (share))) { \
1687 return NT_STATUS_SHARING_VIOLATION; \
1691 if (am2
& (SEC_FILE_WRITE_DATA
| SEC_FILE_APPEND_DATA
)) {
1694 if (am2
& SEC_FILE_READ_DATA
) {
1696 } else if ((am2
& SEC_FILE_EXECUTE
) && read_for_execute
) {
1700 /* if either open involves no read.write or delete access then
1701 it can't conflict */
1702 if (!(am1
& (SEC_FILE_WRITE_DATA
|
1703 SEC_FILE_APPEND_DATA
|
1704 SEC_FILE_READ_DATA
|
1707 return NT_STATUS_OK
;
1709 if (!(am2
& (SEC_FILE_WRITE_DATA
|
1710 SEC_FILE_APPEND_DATA
|
1711 SEC_FILE_READ_DATA
|
1714 return NT_STATUS_OK
;
1717 /* check the basic share access */
1718 CHECK_MASK(am1
, sa2
,
1719 SEC_FILE_WRITE_DATA
| SEC_FILE_APPEND_DATA
,
1720 NTCREATEX_SHARE_ACCESS_WRITE
);
1721 CHECK_MASK(am2
, sa1
,
1722 SEC_FILE_WRITE_DATA
| SEC_FILE_APPEND_DATA
,
1723 NTCREATEX_SHARE_ACCESS_WRITE
);
1725 CHECK_MASK(am1
, sa2
,
1726 SEC_FILE_READ_DATA
| SEC_FILE_EXECUTE
,
1727 NTCREATEX_SHARE_ACCESS_READ
);
1728 CHECK_MASK(am2
, sa1
,
1729 SEC_FILE_READ_DATA
| SEC_FILE_EXECUTE
,
1730 NTCREATEX_SHARE_ACCESS_READ
);
1732 CHECK_MASK(am1
, sa2
,
1734 NTCREATEX_SHARE_ACCESS_DELETE
);
1735 CHECK_MASK(am2
, sa1
,
1737 NTCREATEX_SHARE_ACCESS_DELETE
);
1739 return NT_STATUS_OK
;
1743 a denytest for ntcreatex
1745 static bool torture_ntdenytest(struct torture_context
*tctx
,
1746 struct smbcli_state
*cli1
,
1747 struct smbcli_state
*cli2
, int client
)
1749 const struct bit_value share_access_bits
[] = {
1750 { NTCREATEX_SHARE_ACCESS_READ
, "S_R" },
1751 { NTCREATEX_SHARE_ACCESS_WRITE
, "S_W" },
1752 { NTCREATEX_SHARE_ACCESS_DELETE
, "S_D" }
1754 const struct bit_value access_mask_bits
[] = {
1755 { SEC_FILE_READ_DATA
, "R_DATA" },
1756 { SEC_FILE_WRITE_DATA
, "W_DATA" },
1757 { SEC_FILE_READ_ATTRIBUTE
, "R_ATTR" },
1758 { SEC_FILE_WRITE_ATTRIBUTE
, "W_ATTR" },
1759 { SEC_FILE_READ_EA
, "R_EAS " },
1760 { SEC_FILE_WRITE_EA
, "W_EAS " },
1761 { SEC_FILE_APPEND_DATA
, "A_DATA" },
1762 { SEC_FILE_EXECUTE
, "EXEC " }
1766 bool correct
= true;
1767 struct timespec tv
, tv_start
;
1769 int nbits1
= ARRAY_SIZE(share_access_bits
);
1770 int nbits2
= ARRAY_SIZE(access_mask_bits
);
1771 union smb_open io1
, io2
;
1772 extern int torture_numops
;
1776 torture_comment(tctx
, "format: server correct\n");
1780 fname
= talloc_asprintf(cli1
, "\\ntdeny_%d.dll", client
);
1782 smbcli_unlink(cli1
->tree
, fname
);
1783 fnum1
= smbcli_open(cli1
->tree
, fname
, O_RDWR
|O_CREAT
, DENY_NONE
);
1784 smbcli_write(cli1
->tree
, fnum1
, 0, buf
, 0, sizeof(buf
));
1785 smbcli_close(cli1
->tree
, fnum1
);
1787 clock_gettime_mono(&tv_start
);
1789 io1
.ntcreatex
.level
= RAW_OPEN_NTCREATEX
;
1790 io1
.ntcreatex
.in
.root_fid
.fnum
= 0;
1791 io1
.ntcreatex
.in
.flags
= NTCREATEX_FLAGS_EXTENDED
;
1792 io1
.ntcreatex
.in
.create_options
= NTCREATEX_OPTIONS_NON_DIRECTORY_FILE
;
1793 io1
.ntcreatex
.in
.file_attr
= 0;
1794 io1
.ntcreatex
.in
.alloc_size
= 0;
1795 io1
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_OPEN
;
1796 io1
.ntcreatex
.in
.impersonation
= NTCREATEX_IMPERSONATION_IMPERSONATION
;
1797 io1
.ntcreatex
.in
.security_flags
= 0;
1798 io1
.ntcreatex
.in
.fname
= fname
;
1801 torture_comment(tctx
, "Testing %d entries on %s\n", torture_numops
, fname
);
1803 for (i
=0;i
<torture_numops
;i
++) {
1804 NTSTATUS status1
, status2
, status2_p
;
1806 TALLOC_CTX
*mem_ctx
= talloc_new(NULL
);
1807 enum deny_result res
, res2
;
1808 int b_sa1
= random() & ((1<<nbits1
)-1);
1809 int b_am1
= random() & ((1<<nbits2
)-1);
1810 int b_sa2
= random() & ((1<<nbits1
)-1);
1811 int b_am2
= random() & ((1<<nbits2
)-1);
1812 bool read_for_execute
;
1814 progress_bar(tctx
, i
, torture_numops
);
1816 io1
.ntcreatex
.in
.share_access
= map_bits(share_access_bits
, b_sa1
, nbits1
);
1817 io1
.ntcreatex
.in
.access_mask
= map_bits(access_mask_bits
, b_am1
, nbits2
);
1819 io2
.ntcreatex
.in
.share_access
= map_bits(share_access_bits
, b_sa2
, nbits1
);
1820 io2
.ntcreatex
.in
.access_mask
= map_bits(access_mask_bits
, b_am2
, nbits2
);
1822 status1
= smb_raw_open(cli1
->tree
, mem_ctx
, &io1
);
1823 status2
= smb_raw_open(cli2
->tree
, mem_ctx
, &io2
);
1825 if (random() % 2 == 0) {
1826 read_for_execute
= true;
1828 read_for_execute
= false;
1831 if (!NT_STATUS_IS_OK(status1
)) {
1833 } else if (!NT_STATUS_IS_OK(status2
)) {
1839 /* we can't use smbcli_read() as we need to
1840 set read_for_execute */
1841 r
.readx
.level
= RAW_READ_READX
;
1842 r
.readx
.in
.file
.fnum
= io2
.ntcreatex
.out
.file
.fnum
;
1843 r
.readx
.in
.offset
= 0;
1844 r
.readx
.in
.mincnt
= sizeof(buf
);
1845 r
.readx
.in
.maxcnt
= sizeof(buf
);
1846 r
.readx
.in
.remaining
= 0;
1847 r
.readx
.in
.read_for_execute
= read_for_execute
;
1848 r
.readx
.out
.data
= buf
;
1851 status
= smb_raw_read(cli2
->tree
, &r
);
1852 if (NT_STATUS_IS_OK(status
)) {
1855 if (smbcli_write(cli2
->tree
, io2
.ntcreatex
.out
.file
.fnum
,
1856 0, buf
, 0, sizeof(buf
)) >= 1) {
1861 if (NT_STATUS_IS_OK(status1
)) {
1862 smbcli_close(cli1
->tree
, io1
.ntcreatex
.out
.file
.fnum
);
1864 if (NT_STATUS_IS_OK(status2
)) {
1865 smbcli_close(cli2
->tree
, io2
.ntcreatex
.out
.file
.fnum
);
1868 status2_p
= predict_share_conflict(io1
.ntcreatex
.in
.share_access
,
1869 io1
.ntcreatex
.in
.access_mask
,
1870 io2
.ntcreatex
.in
.share_access
,
1871 io2
.ntcreatex
.in
.access_mask
,
1875 clock_gettime_mono(&tv
);
1876 tdif
= nsec_time_diff(&tv
, &tv_start
);
1878 if (torture_setting_bool(tctx
, "showall", false) ||
1879 !NT_STATUS_EQUAL(status2
, status2_p
) ||
1881 torture_comment(tctx
, "\n%-20s %-70s\n%-20s %-70s %4s %4s %s/%s\n",
1882 bit_string(mem_ctx
, share_access_bits
, b_sa1
, nbits1
),
1883 bit_string(mem_ctx
, access_mask_bits
, b_am1
, nbits2
),
1884 bit_string(mem_ctx
, share_access_bits
, b_sa2
, nbits1
),
1885 bit_string(mem_ctx
, access_mask_bits
, b_am2
, nbits2
),
1889 nt_errstr(status2_p
));
1894 !NT_STATUS_EQUAL(status2
, status2_p
)) {
1895 CHECK_MAX_FAILURES(failed
);
1899 talloc_free(mem_ctx
);
1903 smbcli_unlink(cli1
->tree
, fname
);
1905 torture_comment(tctx
, "finshed ntdenytest (%d failures)\n", failures
);
1912 a denytest for ntcreatex
1914 bool torture_ntdenytest1(struct torture_context
*tctx
,
1915 struct smbcli_state
*cli
, int client
)
1917 extern int torture_seed
;
1919 srandom(torture_seed
+ client
);
1921 torture_comment(tctx
, "starting ntdenytest1 client %d\n", client
);
1923 return torture_ntdenytest(tctx
, cli
, cli
, client
);
1927 a denytest for ntcreatex
1929 bool torture_ntdenytest2(struct torture_context
*torture
,
1930 struct smbcli_state
*cli1
,
1931 struct smbcli_state
*cli2
)
1933 return torture_ntdenytest(torture
, cli1
, cli2
, 0);
1936 #define COMPARE_STATUS(status, correct) do { \
1937 if (!NT_STATUS_EQUAL(status, correct)) { \
1938 torture_result(tctx, TORTURE_FAIL, \
1939 "(%s) Incorrect status %s - should be %s\n", \
1940 __location__, nt_errstr(status), nt_errstr(correct)); \
1945 #define CHECK_STATUS(status, correct) do { \
1946 if (!NT_STATUS_EQUAL(status, correct)) { \
1947 torture_result(tctx, TORTURE_FAIL, \
1948 "(%s) Incorrect status %s - should be %s\n", \
1949 __location__, nt_errstr(status), nt_errstr(correct)); \
1954 #define CHECK_VAL(v, correct) do { \
1955 if ((v) != (correct)) { \
1956 torture_result(tctx, TORTURE_FAIL, \
1957 "(%s) wrong value for %s 0x%x - should be 0x%x\n", \
1958 __location__, #v, (int)(v), (int)correct); \
1963 test sharing of handles with DENY_DOS on a single connection
1965 bool torture_denydos_sharing(struct torture_context
*tctx
,
1966 struct smbcli_state
*cli
)
1969 union smb_fileinfo finfo
;
1970 const char *fname
= "\\torture_denydos.txt";
1972 int fnum1
= -1, fnum2
= -1;
1974 union smb_setfileinfo sfinfo
;
1975 TALLOC_CTX
*mem_ctx
;
1977 mem_ctx
= talloc_new(cli
);
1979 torture_comment(tctx
, "Checking DENY_DOS shared handle semantics\n");
1980 smbcli_unlink(cli
->tree
, fname
);
1982 io
.openx
.level
= RAW_OPEN_OPENX
;
1983 io
.openx
.in
.fname
= fname
;
1984 io
.openx
.in
.flags
= OPENX_FLAGS_ADDITIONAL_INFO
;
1985 io
.openx
.in
.open_mode
= OPENX_MODE_ACCESS_RDWR
| OPENX_MODE_DENY_DOS
;
1986 io
.openx
.in
.open_func
= OPENX_OPEN_FUNC_OPEN
| OPENX_OPEN_FUNC_CREATE
;
1987 io
.openx
.in
.search_attrs
= 0;
1988 io
.openx
.in
.file_attrs
= 0;
1989 io
.openx
.in
.write_time
= 0;
1990 io
.openx
.in
.size
= 0;
1991 io
.openx
.in
.timeout
= 0;
1993 torture_comment(tctx
, "openx twice with RDWR/DENY_DOS\n");
1994 status
= smb_raw_open(cli
->tree
, mem_ctx
, &io
);
1995 CHECK_STATUS(status
, NT_STATUS_OK
);
1996 fnum1
= io
.openx
.out
.file
.fnum
;
1998 status
= smb_raw_open(cli
->tree
, mem_ctx
, &io
);
1999 CHECK_STATUS(status
, NT_STATUS_OK
);
2000 fnum2
= io
.openx
.out
.file
.fnum
;
2002 torture_comment(tctx
, "fnum1=%d fnum2=%d\n", fnum1
, fnum2
);
2004 sfinfo
.generic
.level
= RAW_SFILEINFO_POSITION_INFORMATION
;
2005 sfinfo
.position_information
.in
.file
.fnum
= fnum1
;
2006 sfinfo
.position_information
.in
.position
= 1000;
2007 status
= smb_raw_setfileinfo(cli
->tree
, &sfinfo
);
2008 CHECK_STATUS(status
, NT_STATUS_OK
);
2010 torture_comment(tctx
, "two handles should be same file handle\n");
2011 finfo
.position_information
.level
= RAW_FILEINFO_POSITION_INFORMATION
;
2012 finfo
.position_information
.in
.file
.fnum
= fnum1
;
2013 status
= smb_raw_fileinfo(cli
->tree
, mem_ctx
, &finfo
);
2014 CHECK_STATUS(status
, NT_STATUS_OK
);
2015 CHECK_VAL(finfo
.position_information
.out
.position
, 1000);
2017 finfo
.position_information
.in
.file
.fnum
= fnum2
;
2018 status
= smb_raw_fileinfo(cli
->tree
, mem_ctx
, &finfo
);
2019 CHECK_STATUS(status
, NT_STATUS_OK
);
2020 CHECK_VAL(finfo
.position_information
.out
.position
, 1000);
2023 smbcli_close(cli
->tree
, fnum1
);
2024 smbcli_close(cli
->tree
, fnum2
);
2026 torture_comment(tctx
, "openx twice with RDWR/DENY_NONE\n");
2027 io
.openx
.in
.open_mode
= OPENX_MODE_ACCESS_RDWR
| OPENX_MODE_DENY_NONE
;
2028 status
= smb_raw_open(cli
->tree
, mem_ctx
, &io
);
2029 CHECK_STATUS(status
, NT_STATUS_OK
);
2030 fnum1
= io
.openx
.out
.file
.fnum
;
2032 io
.openx
.in
.open_func
= OPENX_OPEN_FUNC_OPEN
;
2033 status
= smb_raw_open(cli
->tree
, mem_ctx
, &io
);
2034 CHECK_STATUS(status
, NT_STATUS_OK
);
2035 fnum2
= io
.openx
.out
.file
.fnum
;
2037 torture_comment(tctx
, "fnum1=%d fnum2=%d\n", fnum1
, fnum2
);
2039 torture_comment(tctx
, "two handles should be separate\n");
2040 sfinfo
.generic
.level
= RAW_SFILEINFO_POSITION_INFORMATION
;
2041 sfinfo
.position_information
.in
.file
.fnum
= fnum1
;
2042 sfinfo
.position_information
.in
.position
= 1000;
2043 status
= smb_raw_setfileinfo(cli
->tree
, &sfinfo
);
2044 CHECK_STATUS(status
, NT_STATUS_OK
);
2046 finfo
.position_information
.level
= RAW_FILEINFO_POSITION_INFORMATION
;
2047 finfo
.position_information
.in
.file
.fnum
= fnum1
;
2048 status
= smb_raw_fileinfo(cli
->tree
, mem_ctx
, &finfo
);
2049 CHECK_STATUS(status
, NT_STATUS_OK
);
2050 CHECK_VAL(finfo
.position_information
.out
.position
, 1000);
2052 finfo
.position_information
.in
.file
.fnum
= fnum2
;
2053 status
= smb_raw_fileinfo(cli
->tree
, mem_ctx
, &finfo
);
2054 CHECK_STATUS(status
, NT_STATUS_OK
);
2055 CHECK_VAL(finfo
.position_information
.out
.position
, 0);
2058 smbcli_close(cli
->tree
, fnum1
);
2059 smbcli_close(cli
->tree
, fnum2
);
2060 smbcli_unlink(cli
->tree
, fname
);
2065 #define CXD_MATCHES(_cxd, i) \
2066 ((cxd_known[i].cxd_test == (_cxd)->cxd_test) && \
2067 (cxd_known[i].cxd_flags == (_cxd)->cxd_flags) && \
2068 (cxd_known[i].cxd_access1 == (_cxd)->cxd_access1) && \
2069 (cxd_known[i].cxd_sharemode1 == (_cxd)->cxd_sharemode1) && \
2070 (cxd_known[i].cxd_access2 == (_cxd)->cxd_access2) && \
2071 (cxd_known[i].cxd_sharemode2 == (_cxd)->cxd_sharemode2))
2073 static int cxd_find_known(struct createx_data
*cxd
)
2077 /* Optimization for tests which we don't have results saved for. */
2078 if ((cxd
->cxd_test
== CXD_TEST_CREATEX_ACCESS_EXHAUSTIVE
) ||
2079 (cxd
->cxd_test
== CXD_TEST_CREATEX_SHAREMODE_EXTENDED
))
2082 /* Optimization: If our cxd_known table is too large, it hurts test
2083 * performance to search through the entire table each time. If the
2084 * caller can pass in the previous result, we can try the next entry.
2085 * This works if results are taken directly from the same code. */
2087 if ((i
>= 0) && (i
< sizeof(cxd_known
) / sizeof(cxd_known
[0])) &&
2088 CXD_MATCHES(cxd
, i
))
2091 for (i
= 0; i
< (sizeof(cxd_known
) / sizeof(cxd_known
[0])); i
++) {
2092 if (CXD_MATCHES(cxd
, i
))
2099 #define CREATEX_NAME "\\createx_dir"
2101 static bool createx_make_dir(struct torture_context
*tctx
,
2102 struct smbcli_tree
*tree
, TALLOC_CTX
*mem_ctx
, const char *fname
)
2107 status
= smbcli_mkdir(tree
, fname
);
2108 CHECK_STATUS(status
, NT_STATUS_OK
);
2114 static bool createx_make_file(struct torture_context
*tctx
,
2115 struct smbcli_tree
*tree
, TALLOC_CTX
*mem_ctx
, const char *fname
)
2117 union smb_open open_parms
;
2121 ZERO_STRUCT(open_parms
);
2122 open_parms
.generic
.level
= RAW_OPEN_NTCREATEX
;
2123 open_parms
.ntcreatex
.in
.flags
= 0;
2124 open_parms
.ntcreatex
.in
.access_mask
= SEC_RIGHTS_FILE_ALL
;
2125 open_parms
.ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_NORMAL
;
2126 open_parms
.ntcreatex
.in
.share_access
= 0;
2127 open_parms
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_CREATE
;
2128 open_parms
.ntcreatex
.in
.create_options
= 0;
2129 open_parms
.ntcreatex
.in
.fname
= fname
;
2131 status
= smb_raw_open(tree
, mem_ctx
, &open_parms
);
2132 CHECK_STATUS(status
, NT_STATUS_OK
);
2134 status
= smbcli_close(tree
, open_parms
.ntcreatex
.out
.file
.fnum
);
2135 CHECK_STATUS(status
, NT_STATUS_OK
);
2141 static void createx_fill_dir(union smb_open
*open_parms
, int accessmode
,
2142 int sharemode
, const char *fname
)
2144 ZERO_STRUCTP(open_parms
);
2145 open_parms
->generic
.level
= RAW_OPEN_NTCREATEX
;
2146 open_parms
->ntcreatex
.in
.flags
= 0;
2147 open_parms
->ntcreatex
.in
.access_mask
= accessmode
;
2148 open_parms
->ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_DIRECTORY
;
2149 open_parms
->ntcreatex
.in
.share_access
= sharemode
;
2150 open_parms
->ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_OPEN_IF
;
2151 open_parms
->ntcreatex
.in
.create_options
= NTCREATEX_OPTIONS_DIRECTORY
;
2152 open_parms
->ntcreatex
.in
.fname
= fname
;
2155 static void createx_fill_file(union smb_open
*open_parms
, int accessmode
,
2156 int sharemode
, const char *fname
)
2158 ZERO_STRUCTP(open_parms
);
2159 open_parms
->generic
.level
= RAW_OPEN_NTCREATEX
;
2160 open_parms
->ntcreatex
.in
.flags
= 0;
2161 open_parms
->ntcreatex
.in
.access_mask
= accessmode
;
2162 open_parms
->ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_NORMAL
;
2163 open_parms
->ntcreatex
.in
.share_access
= sharemode
;
2164 open_parms
->ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_OPEN_IF
;
2165 open_parms
->ntcreatex
.in
.create_options
= 0;
2166 open_parms
->ntcreatex
.in
.fname
= fname
;
2167 open_parms
->ntcreatex
.in
.root_fid
.fnum
= 0;
2170 static int data_file_fd
= -1;
2172 #define KNOWN "known"
2173 #define CHILD "child"
2174 static bool createx_test_dir(struct torture_context
*tctx
,
2175 struct smbcli_tree
*tree
, int fnum
, TALLOC_CTX
*mem_ctx
, NTSTATUS
*result
)
2179 union smb_open open_parms
;
2181 /* bypass original handle to guarantee creation */
2182 ZERO_STRUCT(open_parms
);
2183 open_parms
.generic
.level
= RAW_OPEN_NTCREATEX
;
2184 open_parms
.ntcreatex
.in
.flags
= 0;
2185 open_parms
.ntcreatex
.in
.access_mask
= SEC_RIGHTS_FILE_ALL
;
2186 open_parms
.ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_NORMAL
;
2187 open_parms
.ntcreatex
.in
.share_access
= 0;
2188 open_parms
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_CREATE
;
2189 open_parms
.ntcreatex
.in
.create_options
= 0;
2190 open_parms
.ntcreatex
.in
.fname
= CREATEX_NAME
"\\" KNOWN
;
2192 status
= smb_raw_open(tree
, mem_ctx
, &open_parms
);
2193 CHECK_STATUS(status
, NT_STATUS_OK
);
2194 smbcli_close(tree
, open_parms
.ntcreatex
.out
.file
.fnum
);
2196 result
[CXD_DIR_ENUMERATE
] = NT_STATUS_OK
;
2198 /* try to create a child */
2199 ZERO_STRUCT(open_parms
);
2200 open_parms
.generic
.level
= RAW_OPEN_NTCREATEX
;
2201 open_parms
.ntcreatex
.in
.flags
= 0;
2202 open_parms
.ntcreatex
.in
.access_mask
= SEC_RIGHTS_FILE_ALL
;
2203 open_parms
.ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_NORMAL
;
2204 open_parms
.ntcreatex
.in
.share_access
= 0;
2205 open_parms
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_CREATE
;
2206 open_parms
.ntcreatex
.in
.create_options
= 0;
2207 open_parms
.ntcreatex
.in
.fname
= CHILD
;
2208 open_parms
.ntcreatex
.in
.root_fid
.fnum
= fnum
;
2210 result
[CXD_DIR_CREATE_CHILD
] =
2211 smb_raw_open(tree
, mem_ctx
, &open_parms
);
2212 smbcli_close(tree
, open_parms
.ntcreatex
.out
.file
.fnum
);
2214 /* try to traverse dir to known good file */
2215 ZERO_STRUCT(open_parms
);
2216 open_parms
.generic
.level
= RAW_OPEN_NTCREATEX
;
2217 open_parms
.ntcreatex
.in
.flags
= 0;
2218 open_parms
.ntcreatex
.in
.access_mask
= SEC_RIGHTS_FILE_ALL
;
2219 open_parms
.ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_NORMAL
;
2220 open_parms
.ntcreatex
.in
.share_access
= 0;
2221 open_parms
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_OPEN
;
2222 open_parms
.ntcreatex
.in
.create_options
= 0;
2223 open_parms
.ntcreatex
.in
.fname
= KNOWN
;
2224 open_parms
.ntcreatex
.in
.root_fid
.fnum
= fnum
;
2226 result
[CXD_DIR_TRAVERSE
] =
2227 smb_raw_open(tree
, mem_ctx
, &open_parms
);
2230 smbcli_close(tree
, open_parms
.ntcreatex
.out
.file
.fnum
);
2231 smbcli_unlink(tree
, CREATEX_NAME
"\\" KNOWN
);
2232 smbcli_unlink(tree
, CREATEX_NAME
"\\" CHILD
);
2238 static bool createx_test_file(struct torture_context
*tctx
,
2239 struct smbcli_tree
*tree
, int fnum
, TALLOC_CTX
*mem_ctx
, NTSTATUS
*result
)
2245 memset(&rd
, 0, sizeof(rd
));
2246 rd
.readx
.level
= RAW_READ_READX
;
2247 rd
.readx
.in
.file
.fnum
= fnum
;
2248 rd
.readx
.in
.mincnt
= sizeof(buf
);
2249 rd
.readx
.in
.maxcnt
= sizeof(buf
);
2250 rd
.readx
.out
.data
= (uint8_t *)buf
;
2252 result
[CXD_FILE_READ
] = smb_raw_read(tree
, &rd
);
2254 memset(&wr
, 0, sizeof(wr
));
2255 wr
.writex
.level
= RAW_WRITE_WRITEX
;
2256 wr
.writex
.in
.file
.fnum
= fnum
;
2257 wr
.writex
.in
.count
= sizeof(buf
);
2258 wr
.writex
.in
.data
= (uint8_t *)buf
;
2260 result
[CXD_FILE_WRITE
] = smb_raw_write(tree
, &wr
);
2262 memset(&rd
, 0, sizeof(rd
));
2263 rd
.readx
.level
= RAW_READ_READX
;
2264 rd
.readx
.in
.file
.fnum
= fnum
;
2265 rd
.readx
.in
.mincnt
= sizeof(buf
);
2266 rd
.readx
.in
.maxcnt
= sizeof(buf
);
2267 rd
.readx
.in
.read_for_execute
= 1;
2268 rd
.readx
.out
.data
= (uint8_t *)buf
;
2270 result
[CXD_FILE_EXECUTE
] = smb_raw_read(tree
, &rd
);
2275 /* TODO When redirecting stdout to a file, the progress bar really screws up
2276 * the output. Could use a switch "--noprogress", or direct the progress bar to
2277 * stderr? No other solution? */
2278 static void createx_progress_bar(struct torture_context
*tctx
, unsigned int i
,
2279 unsigned int total
, unsigned int skipped
)
2281 if (torture_setting_bool(tctx
, "progress", true)) {
2282 torture_comment(tctx
, "%5d/%5d (%d skipped)\r", i
, total
,
2288 static bool torture_createx_specific(struct torture_context
*tctx
, struct
2289 smbcli_state
*cli
, struct smbcli_state
*cli2
, TALLOC_CTX
*mem_ctx
, struct
2290 createx_data
*cxd
, int estimated_count
)
2292 static int call_count
= 1;
2293 static int unskipped_call_count
= 1;
2294 const char *fname
= CREATEX_NAME
;
2295 int fnum
= -1, fnum2
= -1, res
, i
;
2296 union smb_open open_parms1
, open_parms2
;
2298 bool is_dir
= cxd
->cxd_flags
& CXD_FLAGS_DIRECTORY
;
2299 NTSTATUS
*result
= &cxd
->cxd_result
[0];
2300 NTSTATUS
*result2
= &cxd
->cxd_result2
[0];
2301 bool found
= false, failed
= false;
2303 bool (*make_func
)(struct torture_context
*,
2304 struct smbcli_tree
*, TALLOC_CTX
*, const char *);
2305 void (*fill_func
)(union smb_open
*, int, int, const char *);
2306 bool (*test_func
)(struct torture_context
*,
2307 struct smbcli_tree
*, int, TALLOC_CTX
*, NTSTATUS
*);
2308 NTSTATUS (*destroy_func
)(struct smbcli_tree
*, const char *);
2311 make_func
= createx_make_dir
;
2312 fill_func
= createx_fill_dir
;
2313 test_func
= createx_test_dir
;
2314 destroy_func
= smbcli_rmdir
;
2316 make_func
= createx_make_file
;
2317 fill_func
= createx_fill_file
;
2318 test_func
= createx_test_file
;
2319 destroy_func
= smbcli_unlink
;
2322 /* Skip all SACL related tests. */
2323 if ((!torture_setting_bool(tctx
, "sacl_support", true)) &&
2324 ((cxd
->cxd_access1
& SEC_FLAG_SYSTEM_SECURITY
) ||
2325 (cxd
->cxd_access2
& SEC_FLAG_SYSTEM_SECURITY
)))
2328 if (cxd
->cxd_flags
& CXD_FLAGS_MAKE_BEFORE_CREATEX
) {
2329 ret
= make_func(tctx
, cli
->tree
, mem_ctx
, fname
);
2331 torture_result(tctx
, TORTURE_FAIL
,
2332 "Initial creation failed\n");
2338 fill_func(&open_parms1
, cxd
->cxd_access1
, cxd
->cxd_sharemode1
, fname
);
2340 if (cxd
->cxd_test
== CXD_TEST_CREATEX_SHAREMODE
) {
2341 fill_func(&open_parms2
, cxd
->cxd_access2
, cxd
->cxd_sharemode2
,
2345 for (i
= CXD_CREATEX
+ 1; i
< CXD_MAX
; i
++) {
2346 result
[i
] = NT_STATUS_UNSUCCESSFUL
;
2347 result2
[i
] = NT_STATUS_UNSUCCESSFUL
;
2350 /* Perform open(s). */
2351 result
[CXD_CREATEX
] = smb_raw_open(cli
->tree
, mem_ctx
, &open_parms1
);
2352 if (NT_STATUS_IS_OK(result
[CXD_CREATEX
])) {
2353 fnum
= open_parms1
.ntcreatex
.out
.file
.fnum
;
2354 ret
= test_func(tctx
, cli
->tree
, fnum
, mem_ctx
, result
);
2355 smbcli_close(cli
->tree
, fnum
);
2358 if (cxd
->cxd_test
== CXD_TEST_CREATEX_SHAREMODE
) {
2359 result2
[CXD_CREATEX
] = smb_raw_open(cli2
->tree
, mem_ctx
,
2361 if (NT_STATUS_IS_OK(result2
[CXD_CREATEX
])) {
2362 fnum2
= open_parms2
.ntcreatex
.out
.file
.fnum
;
2363 ret
= test_func(tctx
, cli2
->tree
, fnum2
, mem_ctx
,
2365 smbcli_close(cli2
->tree
, fnum2
);
2369 if (data_file_fd
>= 0) {
2371 res
= write(data_file_fd
, &cxd
, sizeof(cxd
));
2372 if (res
!= sizeof(cxd
)) {
2373 torture_result(tctx
, TORTURE_FAIL
,
2374 "(%s): write failed: %s!",
2375 __location__
, strerror(errno
));
2378 } else if ((res
= cxd_find_known(cxd
)) >= 0) {
2380 for (i
= 0; i
< CXD_MAX
; i
++) {
2381 /* Note: COMPARE_STATUS will set the "failed" bool. */
2382 COMPARE_STATUS(result
[i
], cxd_known
[res
].cxd_result
[i
]);
2383 if (i
== 0 && !NT_STATUS_IS_OK(result
[i
]))
2386 if (cxd
->cxd_test
== CXD_TEST_CREATEX_SHAREMODE
) {
2387 COMPARE_STATUS(result2
[i
],
2388 cxd_known
[res
].cxd_result2
[i
]);
2389 if (i
== 0 && !NT_STATUS_IS_OK(result2
[i
]))
2395 /* We print if its not in the "cxd_known" list or if we fail. */
2396 if (!found
|| failed
) {
2397 torture_comment(tctx
,
2398 " { .cxd_test = %d, .cxd_flags = %#3x, "
2399 ".cxd_access1 = %#10x, .cxd_sharemode1=%1x, "
2400 ".cxd_access2=%#10x, .cxd_sharemode2=%1x, "
2401 ".cxd_result = { ", cxd
->cxd_test
, cxd
->cxd_flags
,
2402 cxd
->cxd_access1
, cxd
->cxd_sharemode1
, cxd
->cxd_access2
,
2403 cxd
->cxd_sharemode2
);
2404 for (i
= 0; i
< CXD_MAX
; i
++) {
2405 torture_comment(tctx
, "%s, ", nt_errstr(result
[i
]));
2406 if (i
== 0 && !NT_STATUS_IS_OK(result
[i
]))
2409 torture_comment(tctx
, "}");
2410 if (cxd
->cxd_test
== CXD_TEST_CREATEX_SHAREMODE
) {
2411 torture_comment(tctx
, ", .cxd_result2 = { ");
2412 for (i
= 0; i
< CXD_MAX
; i
++) {
2413 torture_comment(tctx
, "%s, ",
2414 nt_errstr(result2
[i
]));
2415 if (i
== 0 && !NT_STATUS_IS_OK(result2
[i
]))
2418 torture_comment(tctx
, "}");
2420 torture_comment(tctx
, "}, \n");
2422 createx_progress_bar(tctx
, call_count
, estimated_count
,
2423 call_count
- unskipped_call_count
);
2425 /* Count tests that we didn't skip. */
2426 unskipped_call_count
++;
2430 destroy_func(cli
->tree
, fname
);
2434 uint32_t sec_access_bit_groups
[] = {
2435 SEC_RIGHTS_FILE_READ
,
2436 SEC_RIGHTS_FILE_WRITE
,
2437 SEC_RIGHTS_FILE_EXECUTE
2439 #define NUM_ACCESS_GROUPS (sizeof(sec_access_bit_groups) / sizeof(uint32_t))
2440 #define ACCESS_GROUPS_COUNT ((1 << NUM_ACCESS_GROUPS))
2441 #define BITSINBYTE 8
2443 /* Note: See NTCREATEX_SHARE_ACCESS_{NONE,READ,WRITE,DELETE} for share mode
2445 #define NUM_SHAREMODE_PERMUTATIONS 8
2448 * NTCREATEX and SHARE MODE test.
2450 * Open with combinations of (access_mode, share_mode).
2452 * Open 2nd time with combination of (access_mode2, share_mode2).
2454 * Perform operations to verify?
2459 bool torture_createx_sharemodes(struct torture_context
*tctx
,
2460 struct smbcli_state
*cli
,
2461 struct smbcli_state
*cli2
,
2465 TALLOC_CTX
*mem_ctx
;
2468 int gp1
, gp2
; /* group permuters */
2469 struct createx_data cxd
= {0};
2470 int num_access_bits1
= sizeof(cxd
.cxd_access1
) * BITSINBYTE
;
2471 int num_access_bits2
= sizeof(cxd
.cxd_access2
) * BITSINBYTE
;
2473 mem_ctx
= talloc_init("createx_sharemodes");
2477 if (!torture_setting_bool(tctx
, "sacl_support", true))
2478 torture_warning(tctx
, "Skipping SACL related tests!\n");
2480 cxd
.cxd_test
= extended
? CXD_TEST_CREATEX_SHAREMODE_EXTENDED
:
2481 CXD_TEST_CREATEX_SHAREMODE
;
2482 cxd
.cxd_flags
= dir
? CXD_FLAGS_DIRECTORY
: 0;
2484 /* HACK for progress bar: figure out estimated count. */
2485 est
= (NUM_SHAREMODE_PERMUTATIONS
* NUM_SHAREMODE_PERMUTATIONS
) *
2486 ((ACCESS_GROUPS_COUNT
* ACCESS_GROUPS_COUNT
) +
2487 (extended
? num_access_bits1
* num_access_bits2
: 0));
2490 smbcli_deltree(cli
->tree
, CREATEX_NAME
);
2491 smbcli_unlink(cli
->tree
, CREATEX_NAME
);
2493 /* Choose 2 random share modes. */
2494 for (cxd
.cxd_sharemode1
= 0;
2495 cxd
.cxd_sharemode1
< NUM_SHAREMODE_PERMUTATIONS
;
2496 cxd
.cxd_sharemode1
++) {
2497 for (cxd
.cxd_sharemode2
= 0;
2498 cxd
.cxd_sharemode2
< NUM_SHAREMODE_PERMUTATIONS
;
2499 cxd
.cxd_sharemode2
++) {
2501 /* Permutate through our access_bit_groups. */
2502 for (gp1
= 0; gp1
< ACCESS_GROUPS_COUNT
; gp1
++) {
2503 for (gp2
= 0; gp2
< ACCESS_GROUPS_COUNT
; gp2
++)
2505 cxd
.cxd_access1
= cxd
.cxd_access2
= 0;
2507 for (i
= 0; i
< NUM_ACCESS_GROUPS
; i
++)
2511 sec_access_bit_groups
[i
]:0;
2514 sec_access_bit_groups
[i
]:0;
2517 torture_createx_specific(tctx
, cli
,
2518 cli2
, mem_ctx
, &cxd
, est
);
2522 /* Only do the single access bits on an extended run. */
2526 for (i
= 0; i
< num_access_bits1
; i
++) {
2527 for (j
= 0; j
< num_access_bits2
; j
++) {
2528 cxd
.cxd_access1
= 1ull << i
;
2529 cxd
.cxd_access2
= 1ull << j
;
2531 torture_createx_specific(tctx
, cli
,
2532 cli2
, mem_ctx
, &cxd
, est
);
2537 torture_comment(tctx
, "\n");
2539 talloc_free(mem_ctx
);
2543 bool torture_createx_sharemodes_file(struct torture_context
*tctx
,
2544 struct smbcli_state
*cli
, struct smbcli_state
*cli2
)
2546 return torture_createx_sharemodes(tctx
, cli
, cli2
, false, false);
2549 bool torture_createx_sharemodes_dir(struct torture_context
*tctx
,
2550 struct smbcli_state
*cli
, struct smbcli_state
*cli2
)
2552 return torture_createx_sharemodes(tctx
, cli
, cli2
, true, false);
2555 bool torture_createx_access(struct torture_context
*tctx
,
2556 struct smbcli_state
*cli
)
2558 TALLOC_CTX
*mem_ctx
;
2560 uint32_t group_permuter
;
2562 struct createx_data cxd
= {0};
2564 int num_access_bits
= sizeof(cxd
.cxd_access1
) * BITSINBYTE
;
2566 mem_ctx
= talloc_init("createx_dir");
2570 if (!torture_setting_bool(tctx
, "sacl_support", true))
2571 torture_warning(tctx
, "Skipping SACL related tests!\n");
2573 cxd
.cxd_test
= CXD_TEST_CREATEX_ACCESS
;
2575 /* HACK for progress bar: figure out estimated count. */
2576 est
= CXD_FLAGS_COUNT
* (ACCESS_GROUPS_COUNT
+ (num_access_bits
* 3));
2579 smbcli_deltree(cli
->tree
, CREATEX_NAME
);
2580 smbcli_unlink(cli
->tree
, CREATEX_NAME
);
2582 for (cxd
.cxd_flags
= 0; cxd
.cxd_flags
<= CXD_FLAGS_MASK
;
2585 * This implements a basic permutation of all elements of
2586 * 'bit_group'. group_permuter is a bit field representing
2587 * which groups to turn on.
2589 for (group_permuter
= 0; group_permuter
< (1 <<
2590 NUM_ACCESS_GROUPS
); group_permuter
++) {
2591 for (i
= 0, cxd
.cxd_access1
= 0;
2592 i
< NUM_ACCESS_GROUPS
; i
++) {
2593 cxd
.cxd_access1
|= (group_permuter
& (1 << i
))
2594 ? sec_access_bit_groups
[i
] : 0;
2597 torture_createx_specific(tctx
, cli
, NULL
, mem_ctx
,
2600 for (i
= 0; i
< num_access_bits
; i
++) {
2601 /* And now run through the single access bits. */
2602 cxd
.cxd_access1
= 1 << i
;
2603 torture_createx_specific(tctx
, cli
, NULL
, mem_ctx
,
2606 /* Does SEC_FLAG_MAXIMUM_ALLOWED override? */
2607 cxd
.cxd_access1
|= SEC_FLAG_MAXIMUM_ALLOWED
;
2608 torture_createx_specific(tctx
, cli
, NULL
, mem_ctx
,
2611 /* What about SEC_FLAG_SYSTEM_SECURITY? */
2612 cxd
.cxd_access1
|= SEC_FLAG_SYSTEM_SECURITY
;
2613 torture_createx_specific(tctx
, cli
, NULL
, mem_ctx
,
2618 talloc_free(mem_ctx
);
2622 #define ACCESS_KNOWN_MASK 0xF31F01FFull
2624 bool torture_createx_access_exhaustive(struct torture_context
*tctx
,
2625 struct smbcli_state
*cli
)
2628 TALLOC_CTX
*mem_ctx
;
2629 bool ret
= true, first
;
2631 struct createx_data cxd
= {0};
2633 mem_ctx
= talloc_init("createx_dir");
2637 if (!torture_setting_bool(tctx
, "sacl_support", true))
2638 torture_warning(tctx
, "Skipping SACL related tests!\n");
2640 data_file
= getenv("CREATEX_DATA");
2642 data_file_fd
= open(data_file
, O_WRONLY
|O_CREAT
|O_TRUNC
, 0666);
2643 if (data_file_fd
< 0) {
2644 torture_result(tctx
, TORTURE_FAIL
,
2645 "(%s): data file open failedu: %s!",
2646 __location__
, strerror(errno
));
2653 smbcli_deltree(cli
->tree
, CREATEX_NAME
);
2654 smbcli_unlink(cli
->tree
, CREATEX_NAME
);
2656 cxd
.cxd_test
= CXD_TEST_CREATEX_ACCESS_EXHAUSTIVE
;
2658 for (cxd
.cxd_flags
= 0; cxd
.cxd_flags
<= CXD_FLAGS_MASK
;
2660 for (i
= 0, first
= true; (i
!= 0) || first
; first
= false,
2661 i
= ((i
| ~ACCESS_KNOWN_MASK
) + 1) & ACCESS_KNOWN_MASK
) {
2662 cxd
.cxd_access1
= i
;
2663 ret
= torture_createx_specific(tctx
, cli
, NULL
,
2670 close(data_file_fd
);
2674 talloc_free(mem_ctx
);
2678 #define MAXIMUM_ALLOWED_FILE "torture_maximum_allowed"
2679 bool torture_maximum_allowed(struct torture_context
*tctx
,
2680 struct smbcli_state
*cli
)
2682 struct security_descriptor
*sd
, *sd_orig
;
2684 static TALLOC_CTX
*mem_ctx
;
2688 union smb_fileinfo q
;
2689 const char *owner_sid
;
2690 bool has_restore_privilege
, has_backup_privilege
;
2692 mem_ctx
= talloc_init("torture_maximum_allowed");
2694 if (!torture_setting_bool(tctx
, "sacl_support", true))
2695 torture_warning(tctx
, "Skipping SACL related tests!\n");
2697 sd
= security_descriptor_dacl_create(mem_ctx
,
2699 SID_NT_AUTHENTICATED_USERS
,
2700 SEC_ACE_TYPE_ACCESS_ALLOWED
,
2701 SEC_RIGHTS_FILE_READ
,
2705 smbcli_unlink(cli
->tree
, MAXIMUM_ALLOWED_FILE
);
2707 /* create initial file with restrictive SD */
2708 memset(&io
, 0, sizeof(io
));
2709 io
.generic
.level
= RAW_OPEN_NTTRANS_CREATE
;
2710 io
.ntcreatex
.in
.access_mask
= SEC_RIGHTS_FILE_ALL
;
2711 io
.ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_NORMAL
;
2712 io
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_CREATE
;
2713 io
.ntcreatex
.in
.impersonation
= NTCREATEX_IMPERSONATION_ANONYMOUS
;
2714 io
.ntcreatex
.in
.fname
= MAXIMUM_ALLOWED_FILE
;
2715 io
.ntcreatex
.in
.sec_desc
= sd
;
2717 status
= smb_raw_open(cli
->tree
, mem_ctx
, &io
);
2718 CHECK_STATUS(status
, NT_STATUS_OK
);
2719 fnum
= io
.ntcreatex
.out
.file
.fnum
;
2721 /* the correct answers for this test depends on whether the
2722 user has restore privileges. To find that out we first need
2723 to know our SID - get it from the owner_sid of the file we
2725 q
.query_secdesc
.level
= RAW_FILEINFO_SEC_DESC
;
2726 q
.query_secdesc
.in
.file
.fnum
= fnum
;
2727 q
.query_secdesc
.in
.secinfo_flags
= SECINFO_DACL
| SECINFO_OWNER
;
2728 status
= smb_raw_fileinfo(cli
->tree
, tctx
, &q
);
2729 CHECK_STATUS(status
, NT_STATUS_OK
);
2730 sd_orig
= q
.query_secdesc
.out
.sd
;
2732 owner_sid
= dom_sid_string(tctx
, sd_orig
->owner_sid
);
2734 status
= torture_check_privilege(cli
,
2736 sec_privilege_name(SEC_PRIV_RESTORE
));
2737 has_restore_privilege
= NT_STATUS_IS_OK(status
);
2738 torture_comment(tctx
, "Checked SEC_PRIV_RESTORE for %s - %s\n",
2740 has_restore_privilege
?"Yes":"No");
2742 status
= torture_check_privilege(cli
,
2744 sec_privilege_name(SEC_PRIV_BACKUP
));
2745 has_backup_privilege
= NT_STATUS_IS_OK(status
);
2746 torture_comment(tctx
, "Checked SEC_PRIV_BACKUP for %s - %s\n",
2748 has_backup_privilege
?"Yes":"No");
2750 smbcli_close(cli
->tree
, fnum
);
2752 for (i
= 0; i
< 32; i
++) {
2753 uint32_t mask
= SEC_FLAG_MAXIMUM_ALLOWED
| (1u << i
);
2754 uint32_t ok_mask
= SEC_RIGHTS_FILE_READ
| SEC_GENERIC_READ
|
2755 SEC_STD_DELETE
| SEC_STD_WRITE_DAC
;
2757 if (has_restore_privilege
) {
2758 ok_mask
|= SEC_RIGHTS_PRIV_RESTORE
;
2760 if (has_backup_privilege
) {
2761 ok_mask
|= SEC_RIGHTS_PRIV_BACKUP
;
2764 /* Skip all SACL related tests. */
2765 if ((!torture_setting_bool(tctx
, "sacl_support", true)) &&
2766 (mask
& SEC_FLAG_SYSTEM_SECURITY
))
2769 memset(&io
, 0, sizeof(io
));
2770 io
.generic
.level
= RAW_OPEN_NTTRANS_CREATE
;
2771 io
.ntcreatex
.in
.access_mask
= mask
;
2772 io
.ntcreatex
.in
.file_attr
= FILE_ATTRIBUTE_NORMAL
;
2773 io
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_OPEN
;
2774 io
.ntcreatex
.in
.impersonation
=
2775 NTCREATEX_IMPERSONATION_ANONYMOUS
;
2776 io
.ntcreatex
.in
.fname
= MAXIMUM_ALLOWED_FILE
;
2778 status
= smb_raw_open(cli
->tree
, mem_ctx
, &io
);
2779 if (mask
& ok_mask
||
2780 mask
== SEC_FLAG_MAXIMUM_ALLOWED
) {
2781 CHECK_STATUS(status
, NT_STATUS_OK
);
2783 if (mask
& SEC_FLAG_SYSTEM_SECURITY
) {
2784 CHECK_STATUS(status
, NT_STATUS_PRIVILEGE_NOT_HELD
);
2786 CHECK_STATUS(status
, NT_STATUS_ACCESS_DENIED
);
2790 fnum
= io
.ntcreatex
.out
.file
.fnum
;
2792 smbcli_close(cli
->tree
, fnum
);
2796 smbcli_unlink(cli
->tree
, MAXIMUM_ALLOWED_FILE
);