From fa3924f9ea656c279d430212b4b2a667bf5227f8 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 12 Feb 2013 10:48:09 -0800 Subject: 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 Reviewed-by: Jeff Layton Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Tue Feb 12 22:59:21 CET 2013 on sn-devel-104 --- source3/smbd/trans2.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'source3/smbd') diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 8cffc15dec..fae9e1ff9d 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 )); -- cgit