From: Jeremy Allison Date: Wed, 25 Feb 2009 21:01:04 +0000 (-0800) Subject: Fix bug in processing of open modes in POSIX open. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac11d94f36e1878f3f5d86f2e7197fd8ecdd196b;p=thirdparty%2Fsamba.git Fix bug in processing of open modes in POSIX open. Was missing case of "If file exists open. If file doesn't exist error." Damn damn damn. CIFSFS client will have to have fallback cases for this error for a long time. Make test for open modes more robust against other bits. Jeremy. --- diff --git a/source/smbd/trans2.c b/source/smbd/trans2.c index 904a84bef6d..d3b4fb9bb9e 100644 --- a/source/smbd/trans2.c +++ b/source/smbd/trans2.c @@ -5463,6 +5463,8 @@ static NTSTATUS smb_posix_open(connection_struct *conn, create_disp = FILE_OVERWRITE_IF; } else if((wire_open_mode & SMB_O_CREAT) == SMB_O_CREAT) { create_disp = FILE_OPEN_IF; + } else if ((wire_open_mode & (SMB_O_CREAT | SMB_O_EXCL | SMB_O_TRUNC)) == 0) { + create_disp = FILE_OPEN; } else { DEBUG(5,("smb_posix_open: invalid create mode 0x%x\n", (unsigned int)wire_open_mode ));