[open] fix open_if for dir when dir exists

This commit is contained in:
Olga Kornievskaia 2012-03-15 17:19:46 -04:00
parent 540ad44f21
commit 863db2735b

View file

@ -288,10 +288,13 @@ out:
} }
static BOOLEAN open_for_attributes(uint32_t type, ULONG access_mask, static BOOLEAN open_for_attributes(uint32_t type, ULONG access_mask,
ULONG disposition) ULONG disposition, int status)
{ {
if (type == NF4DIR) { if (type == NF4DIR) {
if (disposition == FILE_OPEN || disposition == FILE_OVERWRITE) { if (disposition == FILE_OPEN || disposition == FILE_OVERWRITE ||
(!status && (disposition == FILE_OPEN_IF ||
disposition == FILE_OVERWRITE_IF ||
disposition == FILE_SUPERSEDE))) {
dprintf(1, "Opening a directory\n"); dprintf(1, "Opening a directory\n");
return TRUE; return TRUE;
} else { } else {
@ -570,7 +573,7 @@ static int handle_open(nfs41_upcall *upcall)
status = NO_ERROR; status = NO_ERROR;
} else if (open_for_attributes(state->type, args->access_mask, } else if (open_for_attributes(state->type, args->access_mask,
args->disposition)) { args->disposition, status)) {
if (status) { if (status) {
dprintf(1, "nfs41_lookup failed with %d\n", status); dprintf(1, "nfs41_lookup failed with %d\n", status);
goto out_free_state; goto out_free_state;