root/source4/torture/basic/denytest.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. denystr
  2. openstr
  3. resultstr
  4. progress_bar
  5. torture_denytest1
  6. torture_denytest2
  7. torture_denytest3
  8. map_bits
  9. bit_string
  10. predict_share_conflict
  11. torture_ntdenytest
  12. torture_ntdenytest1
  13. torture_ntdenytest2
  14. torture_denydos_sharing

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

/* [<][>][^][v][top][bottom][index][help] */