From: Jeremy Allison Date: Tue, 12 Feb 2013 18:48:09 +0000 (-0800) Subject: Fix bug 9519 - Samba returns unexpected error on SMB posix open. X-Git-Tag: samba-4.0.5~226 X-Git-Url: http://git.samba.org/?a=commitdiff_plain;h=1c74a7da6b0d1897e4a6f06e925c7a6e801d226e;p=ddiss%2Fsamba.git 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 Autobuild-User(v4-0-test): Karolin Seeger Autobuild-Date(v4-0-test): Wed Feb 13 21:13:52 CET 2013 on sn-devel-104 --- diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 6f3dc4e54c0..062af258330 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -7411,12 +7411,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 ));