summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2009-02-25 13:01:04 -0800
committerJeremy Allison <jra@samba.org>2009-02-25 13:01:04 -0800
commitac11d94f36e1878f3f5d86f2e7197fd8ecdd196b (patch)
tree6dff9e9642b64c150eaa18d8f539dd35a05e6bb6
parenta8f10f4469b31565e33669560657c2b3df68c13b (diff)
downloadsamba-ac11d94f36e1878f3f5d86f2e7197fd8ecdd196b.tar.gz
samba-ac11d94f36e1878f3f5d86f2e7197fd8ecdd196b.tar.xz
samba-ac11d94f36e1878f3f5d86f2e7197fd8ecdd196b.zip
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.
-rw-r--r--source/smbd/trans2.c2
1 files changed, 2 insertions, 0 deletions
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 ));