From 863db2735b3e571668e4ff63b810ea86be2a5568 Mon Sep 17 00:00:00 2001 From: Olga Kornievskaia Date: Thu, 15 Mar 2012 17:19:46 -0400 Subject: [PATCH] [open] fix open_if for dir when dir exists --- daemon/open.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/daemon/open.c b/daemon/open.c index f00130b..f3e2e7c 100644 --- a/daemon/open.c +++ b/daemon/open.c @@ -288,10 +288,13 @@ out: } static BOOLEAN open_for_attributes(uint32_t type, ULONG access_mask, - ULONG disposition) + ULONG disposition, int status) { 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"); return TRUE; } else { @@ -570,7 +573,7 @@ static int handle_open(nfs41_upcall *upcall) status = NO_ERROR; } else if (open_for_attributes(state->type, args->access_mask, - args->disposition)) { + args->disposition, status)) { if (status) { dprintf(1, "nfs41_lookup failed with %d\n", status); goto out_free_state;