diff options
-rw-r--r-- | source3/Makefile.in | 17 | ||||
-rw-r--r-- | source3/include/smb_macros.h | 3 | ||||
-rw-r--r-- | source3/torture/denytest.c | 1567 | ||||
-rw-r--r-- | source3/torture/torture.c | 200 |
4 files changed, 1590 insertions, 197 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index bb059ba1c0..51e9e213de 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -318,8 +318,9 @@ UMOUNT_OBJ = client/smbumount.o \ NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(UBIQX_OBJ) \ $(LIBSMB_OBJ) $(LIB_OBJ) -SMBTORTURE_OBJ = torture/torture.o torture/nbio.o torture/scanner.o $(LIBSMB_OBJ) $(PARAM_OBJ) \ - $(UBIQX_OBJ) $(LIB_OBJ) +SMBTORTURE_OBJ = torture/torture.o torture/nbio.o torture/scanner.o \ + torture/denytest.o \ + $(LIBSMB_OBJ) $(PARAM_OBJ) $(UBIQX_OBJ) $(LIB_OBJ) MASKTEST_OBJ = torture/masktest.o $(LIBSMB_OBJ) $(PARAM_OBJ) \ $(UBIQX_OBJ) $(LIB_OBJ) @@ -414,7 +415,7 @@ WINBIND_NSS_PICOBJS = $(WINBIND_NSS_OBJ:.o=.po) ###################################################################### # now the rules... ###################################################################### -all : CHECK include/proto.h $(SPROGS) $(PROGS) $(SHLIBS) nsswitch +all : CHECK $(SPROGS) $(PROGS) $(SHLIBS) nsswitch pam_smbpass : CHECK bin/pam_smbpass.@SHLIBEXT@ @@ -458,7 +459,7 @@ MAKEDIR = || exec false; \ mkdir "$$dir" || \ exec false; fi || exec false -.c.o: +.c.o: @if (: >> $@ || : > $@) >/dev/null 2>&1; then rm -f $@; else \ dir=`echo $@ | sed 's,/[^/]*$$,,;s,^$$,.,'` $(MAKEDIR); fi @echo Compiling $*.c @@ -710,7 +711,13 @@ winbindd_proto: delproto: @/bin/rm -f $(srcdir)/include/proto.h -include/proto.h: +# we want proto.h to be rebuilt if it doesn't exist, but not rebuilt every time +.proto.stamp: include/proto.h + @[ -f $@ ] || touch $@ + +$(PROTO_OBJ) : .proto.stamp + +include/proto.h: @echo rebuilding include/proto.h @cd $(srcdir) && $(AWK) -f script/mkproto.awk `echo $(PROTO_OBJ) | tr ' ' '\n' | sed -e 's/\.o/\.c/g' | sort -u | egrep -v 'ubiqx/|wrapped'` > include/proto.h diff --git a/source3/include/smb_macros.h b/source3/include/smb_macros.h index d28ef6f068..f6d547ea53 100644 --- a/source3/include/smb_macros.h +++ b/source3/include/smb_macros.h @@ -53,6 +53,9 @@ /* pointer difference macro */ #define PTR_DIFF(p1,p2) ((ptrdiff_t)(((const char *)(p1)) - (const char *)(p2))) +/* work out how many elements there are in a static array */ +#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) + /* assert macros */ #define SMB_ASSERT(b) ((b)?(void)0: \ (DEBUG(0,("PANIC: assert failed at %s(%d)\n", \ diff --git a/source3/torture/denytest.c b/source3/torture/denytest.c new file mode 100644 index 0000000000..a19b034767 --- /dev/null +++ b/source3/torture/denytest.c @@ -0,0 +1,1567 @@ +/* + Unix SMB/Netbios implementation. + Version 3.0 + SMB torture tester - scanning functions + Copyright (C) Andrew Tridgell 2001 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#define NO_SYSLOG + +#include "includes.h" + +extern BOOL torture_showall; + +enum deny_result {A_0=0, A_X=1, A_R=2, A_W=3, A_RW=5}; + + +static char *denystr(int denymode) +{ + struct { + int v; + char *name; + } deny_modes[] = { + {DENY_DOS, "DENY_DOS"}, + {DENY_ALL, "DENY_ALL"}, + {DENY_WRITE, "DENY_WRITE"}, + {DENY_READ, "DENY_READ"}, + {DENY_NONE, "DENY_NONE"}, + {DENY_FCB, "DENY_FCB"}, + {-1, NULL}}; + int i; + for (i=0;deny_modes[i].name;i++) { + if (deny_modes[i].v == denymode) return deny_modes[i].name; + } + return "DENY_XXX"; +} + +static char *openstr(int mode) +{ + struct { + int v; + char *name; + } open_modes[] = { + {O_RDWR, "O_RDWR"}, + {O_RDONLY, "O_RDONLY"}, + {O_WRONLY, "O_WRONLY"}, + {-1, NULL}}; + int i; + for (i=0;open_modes[i].name;i++) { + if (open_modes[i].v == mode) return open_modes[i].name; + } + return "O_XXX"; +} + +static char *resultstr(enum deny_result res) +{ + struct { + enum deny_result res; + char *name; + } results[] = { + {A_X, "X"}, + {A_0, "-"}, + {A_R, "R"}, + {A_W, "W"}, + {A_RW,"RW"}}; + int i; + for (i=0;ARRAY_SIZE(results);i++) { + if (results[i].res == res) return results[i].name; + } + return "*"; +} + +static struct { + int isexe; + int mode1, deny1; + int mode2, deny2; + enum deny_result result; +} denytable2[] = { +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_RW}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_W}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_RW}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_R}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_W}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_0} +}; + + +static struct { + int isexe; + int mode1, deny1; + int mode2, deny2; + enum deny_result result; +} denytable1[] = { +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_RW}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_W}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_RW}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_R}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_W}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_RW}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_W}, +{1, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_W}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{1, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{1, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{1, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_RW}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_W}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{1, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{1, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_RW}, +{1, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_RW}, +{1, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_RW}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{1, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW}, +{1, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW}, +{1, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{1, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW}, +{1, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW}, +{1, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_DOS, O_RDWR, DENY_FCB, A_RW}, +{0, O_RDWR, DENY_DOS, O_RDONLY, DENY_FCB, A_RW}, +{0, O_RDWR, DENY_DOS, O_WRONLY, DENY_FCB, A_RW}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_R}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_DOS, A_RW}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_DOS, A_R}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_DOS, A_W}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_DOS, O_RDWR, DENY_FCB, A_RW}, +{0, O_WRONLY, DENY_DOS, O_RDONLY, DENY_FCB, A_RW}, +{0, O_WRONLY, DENY_DOS, O_WRONLY, DENY_FCB, A_RW}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_ALL, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_ALL, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_R}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_READ, A_R}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_NONE, A_R}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_WRITE, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_WRITE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDWR, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_W}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_READ, A_W}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_NONE, A_W}, +{0, O_WRONLY, DENY_READ, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_READ, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_READ, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDWR, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDWR, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_RW}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_R}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_W}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{0, O_RDONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{0, O_RDONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_DOS, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_READ, A_RW}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_READ, A_R}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_READ, A_W}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_NONE, A_RW}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_NONE, A_R}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_NONE, A_W}, +{0, O_WRONLY, DENY_NONE, O_RDWR, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_NONE, O_RDONLY, DENY_FCB, A_0}, +{0, O_WRONLY, DENY_NONE, O_WRONLY, DENY_FCB, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_DOS, A_RW}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_DOS, A_W}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDWR, DENY_FCB, O_RDWR, DENY_FCB, A_RW}, +{0, O_RDWR, DENY_FCB, O_RDONLY, DENY_FCB, A_RW}, +{0, O_RDWR, DENY_FCB, O_WRONLY, DENY_FCB, A_RW}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{0, O_RDONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW}, +{0, O_RDONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW}, +{0, O_RDONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_DOS, A_RW}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_DOS, A_R}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_DOS, A_W}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_ALL, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_WRITE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_READ, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_READ, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_NONE, A_0}, +{0, O_WRONLY, DENY_FCB, O_RDWR, DENY_FCB, A_RW}, +{0, O_WRONLY, DENY_FCB, O_RDONLY, DENY_FCB, A_RW}, +{0, O_WRONLY, DENY_FCB, O_WRONLY, DENY_FCB, A_RW} +}; + + +/* + this produces a matrix of deny mode behaviour for 1 connection + */ +BOOL torture_denytest1(int dummy) +{ + static struct cli_state cli1; + int fnum1, fnum2; + int i; + BOOL correct = True; + char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"}; + + if (!torture_open_connection(&cli1)) { + return False; + } + + printf("starting denytest1\n"); + + for (i=0;i<2;i++) { + cli_unlink(&cli1, fnames[i]); + fnum1 = cli_open(&cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE); + cli_write(&cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i])); + cli_close(&cli1, fnum1); + } + + printf("testing %d entries\n", ARRAY_SIZE(denytable1)); + + for (i=0; i<ARRAY_SIZE(denytable1); i++) { + enum deny_result res; + char *fname = fnames[denytable1[i].isexe]; + + fnum1 = cli_open(&cli1, fname, + denytable1[i].mode1, + denytable1[i].deny1); + fnum2 = cli_open(&cli1, fname, + denytable1[i].mode2, + denytable1[i].deny2); + + if (fnum1 == -1) { + res = A_X; + } else if (fnum2 == -1) { + res = A_0; + } else { + char x = 1; + res = A_0; + if (cli_read(&cli1, fnum2, (void *)&x, 0, 1) == 1) { + res += A_R; + } + if (cli_write(&cli1, fnum2, 0, (void *)&x, 0, 1) == 1) { + res += A_W; + } + } + + if (res != denytable1[i].result) { + correct = False; + } + + if (torture_showall || res != denytable1[i].result) { + printf("%s %8s %10s %8s %10s %s (correct=%s)\n", + fname, + denystr(denytable1[i].deny1), + openstr(denytable1[i].mode1), + denystr(denytable1[i].deny2), + openstr(denytable1[i].mode2), + resultstr(res), + resultstr(denytable1[i].result)); + } + + cli_close(&cli1, fnum1); + cli_close(&cli1, fnum2); + } + + for (i=0;i<2;i++) { + cli_unlink(&cli1, fnames[i]); + } + + if (!torture_close_connection(&cli1)) { + correct = False; + } + + printf("finshed denytest1\n"); + return correct; +} + + +/* + this produces a matrix of deny mode behaviour with 2 connections + */ +BOOL torture_denytest2(int dummy) +{ + static struct cli_state cli1, cli2; + int fnum1, fnum2; + int i; + BOOL correct = True; + char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"}; + + if (!torture_open_connection(&cli1) || !torture_open_connection(&cli2)) { + return False; + } + + printf("starting denytest2\n"); + + for (i=0;i<2;i++) { + cli_unlink(&cli1, fnames[i]); + fnum1 = cli_open(&cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE); + cli_write(&cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i])); + cli_close(&cli1, fnum1); + } + + for (i=0; i<ARRAY_SIZE(denytable2); i++) { + enum deny_result res; + char *fname = fnames[denytable2[i].isexe]; + + fnum1 = cli_open(&cli1, fname, + denytable2[i].mode1, + denytable2[i].deny1); + fnum2 = cli_open(&cli2, fname, + denytable2[i].mode2, + denytable2[i].deny2); + + if (fnum1 == -1) { + res = A_X; + } else if (fnum2 == -1) { + res = A_0; + } else { + char x = 1; + res = A_0; + if (cli_read(&cli2, fnum2, (void *)&x, 0, 1) == 1) { + res += A_R; + } + if (cli_write(&cli2, fnum2, 0, (void *)&x, 0, 1) == 1) { + res += A_W; + } + } + + if (res != denytable2[i].result) { + correct = False; + } + + if (torture_showall || res != denytable2[i].result) { + printf("%s %8s %10s %8s %10s %s (correct=%s)\n", + fname, + denystr(denytable2[i].deny1), + openstr(denytable2[i].mode1), + denystr(denytable2[i].deny2), + openstr(denytable2[i].mode2), + resultstr(res), + resultstr(denytable2[i].result)); + } + + cli_close(&cli1, fnum1); + cli_close(&cli2, fnum2); + } + + for (i=0;i<2;i++) { + cli_unlink(&cli1, fnames[i]); + } + + if (!torture_close_connection(&cli1)) { + correct = False; + } + if (!torture_close_connection(&cli2)) { + correct = False; + } + + printf("finshed denytest2\n"); + return correct; +} + diff --git a/source3/torture/torture.c b/source3/torture/torture.c index c325549004..912abf07f2 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -32,6 +32,7 @@ static struct cli_state current_cli; static fstring randomfname; static BOOL use_oplocks; static BOOL use_level_II_oplocks; +BOOL torture_showall = False; static double create_procs(BOOL (*fn)(int), BOOL *result); @@ -1501,195 +1502,6 @@ static BOOL run_locktest5(int dummy) return correct; } - -/* - this produces a matrix of deny mode behaviour - */ -static BOOL run_denytest1(int dummy) -{ - static struct cli_state cli1, cli2; - int fnum1, fnum2; - int f, d1, d2, o1, o2, x=0; - char *fnames[] = {"\\denytest1.exe", "\\denytest1.dat", NULL}; - struct { - int v; - char *name; - } deny_modes[] = { - {DENY_DOS, "DENY_DOS"}, - {DENY_ALL, "DENY_ALL"}, - {DENY_WRITE, "DENY_WRITE"}, - {DENY_READ, "DENY_READ"}, - {DENY_NONE, "DENY_NONE"}, - {DENY_FCB, "DENY_FCB"}, - {-1, NULL}}; - struct { - int v; - char *name; - } open_modes[] = { - {O_RDWR, "O_RDWR"}, - {O_RDONLY, "O_RDONLY"}, - {O_WRONLY, "O_WRONLY"}, - {-1, NULL}}; - BOOL correct = True; - - if (!torture_open_connection(&cli1) || !torture_open_connection(&cli2)) { - return False; - } - cli_sockopt(&cli1, sockops); - cli_sockopt(&cli2, sockops); - - printf("starting denytest1\n"); - - for (f=0;fnames[f];f++) { - cli_unlink(&cli1, fnames[f]); - - fnum1 = cli_open(&cli1, fnames[f], O_RDWR|O_CREAT, DENY_NONE); - cli_write(&cli1, fnum1, 0, fnames[f], 0, strlen(fnames[f])); - cli_close(&cli1, fnum1); - - for (d1=0;deny_modes[d1].name;d1++) - for (o1=0;open_modes[o1].name;o1++) - for (d2=0;deny_modes[d2].name;d2++) - for (o2=0;open_modes[o2].name;o2++) { - fnum1 = cli_open(&cli1, fnames[f], - open_modes[o1].v, - deny_modes[d1].v); - fnum2 = cli_open(&cli2, fnames[f], - open_modes[o2].v, - deny_modes[d2].v); - - printf("%s %8s %10s %8s %10s ", - fnames[f], - open_modes[o1].name, - deny_modes[d1].name, - open_modes[o2].name, - deny_modes[d2].name); - - if (fnum1 == -1) { - printf("X"); - } else if (fnum2 == -1) { - printf("-"); - } else { - if (cli_read(&cli2, fnum2, (void *)&x, 0, 1) == 1) { - printf("R"); - } - if (cli_write(&cli2, fnum2, 0, (void *)&x, 0, 1) == 1) { - printf("W"); - } - } - - printf("\n"); - cli_close(&cli1, fnum1); - cli_close(&cli2, fnum2); - } - - cli_unlink(&cli1, fnames[f]); - } - - if (!torture_close_connection(&cli1)) { - correct = False; - } - if (!torture_close_connection(&cli2)) { - correct = False; - } - - printf("finshed denytest1\n"); - return correct; -} - - -/* - this produces a matrix of deny mode behaviour for two opens on the - same connection - */ -static BOOL run_denytest2(int dummy) -{ - static struct cli_state cli1; - int fnum1, fnum2; - int f, d1, d2, o1, o2, x=0; - char *fnames[] = {"\\denytest2.exe", "\\denytest2.dat", NULL}; - struct { - int v; - char *name; - } deny_modes[] = { - {DENY_DOS, "DENY_DOS"}, - {DENY_ALL, "DENY_ALL"}, - {DENY_WRITE, "DENY_WRITE"}, - {DENY_READ, "DENY_READ"}, - {DENY_NONE, "DENY_NONE"}, - {DENY_FCB, "DENY_FCB"}, - {-1, NULL}}; - struct { - int v; - char *name; - } open_modes[] = { - {O_RDWR, "O_RDWR"}, - {O_RDONLY, "O_RDONLY"}, - {O_WRONLY, "O_WRONLY"}, - {-1, NULL}}; - BOOL correct = True; - - if (!torture_open_connection(&cli1)) { - return False; - } - cli_sockopt(&cli1, sockops); - - printf("starting denytest2\n"); - - for (f=0;fnames[f];f++) { - cli_unlink(&cli1, fnames[f]); - - fnum1 = cli_open(&cli1, fnames[f], O_RDWR|O_CREAT, DENY_NONE); - cli_write(&cli1, fnum1, 0, fnames[f], 0, strlen(fnames[f])); - cli_close(&cli1, fnum1); - - for (d1=0;deny_modes[d1].name;d1++) - for (o1=0;open_modes[o1].name;o1++) - for (d2=0;deny_modes[d2].name;d2++) - for (o2=0;open_modes[o2].name;o2++) { - fnum1 = cli_open(&cli1, fnames[f], - open_modes[o1].v, - deny_modes[d1].v); - fnum2 = cli_open(&cli1, fnames[f], - open_modes[o2].v, - deny_modes[d2].v); - - printf("%s %8s %10s %8s %10s ", - fnames[f], - open_modes[o1].name, - deny_modes[d1].name, - open_modes[o2].name, - deny_modes[d2].name); - - if (fnum1 == -1) { - printf("X"); - } else if (fnum2 == -1) { - printf("-"); - } else { - if (cli_read(&cli1, fnum2, (void *)&x, 0, 1) == 1) { - printf("R"); - } - if (cli_write(&cli1, fnum2, 0, (void *)&x, 0, 1) == 1) { - printf("W"); - } - } - - printf("\n"); - cli_close(&cli1, fnum1); - cli_close(&cli1, fnum2); - } - - cli_unlink(&cli1, fnames[f]); - } - - if (!torture_close_connection(&cli1)) { - correct = False; - } - - printf("finshed denytest2\n"); - return correct; -} - /* test whether fnums and tids open on one VC are available on another (a major security hole) @@ -3164,8 +2976,8 @@ static struct { {"OPLOCK2", run_oplock2, 0}, {"OPLOCK3", run_oplock3, 0}, {"DIR", run_dirtest, 0}, - {"DENY1", run_denytest1, 0}, - {"DENY2", run_denytest2, 0}, + {"DENY1", torture_denytest1, 0}, + {"DENY2", torture_denytest2, 0}, {"TCON", run_tcon_test, 0}, {"RW1", run_readwritetest, 0}, {"RW2", run_readwritemulti, FLAG_MULTIPROC}, @@ -3237,6 +3049,7 @@ static void usage(void) printf("\t-O socket_options\n"); printf("\t-m maximum protocol\n"); printf("\t-L use oplocks\n"); + printf("\t-A showall\n"); printf("\n\n"); printf("tests are:"); @@ -3309,7 +3122,7 @@ static void usage(void) fstrcpy(workgroup, lp_workgroup()); - while ((opt = getopt(argc, argv, "hW:U:n:N:O:o:m:Ld:")) != EOF) { + while ((opt = getopt(argc, argv, "hW:U:n:N:O:o:m:Ld:A")) != EOF) { switch (opt) { case 'W': fstrcpy(workgroup,optarg); @@ -3332,6 +3145,9 @@ static void usage(void) case 'L': use_oplocks = True; break; + case 'A': + torture_showall = True; + break; case 'n': fstrcpy(myname, optarg); break; |