From df6c52c0e64803432d9088b379ba738e35f0f27f Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 12 Feb 2013 10:48:09 -0800 Subject: [PATCH] Fix bug 9519 - Samba returns unexpected error on SMB posix open. Explicitly ignore bare O_EXCL flags instead of returning INVALID_PARAMETER. That's what the Linux kernel does. Signed-off-by: Jeremy Allison --- source3/smbd/trans2.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 8cffc15..fae9e1f 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -7412,12 +7412,19 @@ static NTSTATUS smb_posix_open(connection_struct *conn, /* File exists open. File not exist create. */ create_disp = FILE_OPEN_IF; break; + case SMB_O_EXCL: + /* O_EXCL on its own without O_CREAT is undefined. + We deliberately ignore it as some versions of + Linux CIFSFS can send a bare O_EXCL on the + wire which other filesystems in the kernel + ignore. See bug 9519 for details. */ + + /* Fallthrough. */ + case 0: /* File exists open. File not exist fail. */ create_disp = FILE_OPEN; break; - case SMB_O_EXCL: - /* O_EXCL on its own without O_CREAT is undefined. */ default: DEBUG(5,("smb_posix_open: invalid create mode 0x%x\n", (unsigned int)wire_open_mode )); -- 1.8.1