]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/samba/samba-3.6.99-fix_dropbox_share.patch
samba: add current RHEL6 patches
[ipfire-2.x.git] / src / patches / samba / samba-3.6.99-fix_dropbox_share.patch
diff --git a/src/patches/samba/samba-3.6.99-fix_dropbox_share.patch b/src/patches/samba/samba-3.6.99-fix_dropbox_share.patch
new file mode 100644 (file)
index 0000000..564ecb4
--- /dev/null
@@ -0,0 +1,271 @@
+From 8f286450a223d002358f6dfe81b770fee86c3c85 Mon Sep 17 00:00:00 2001
+From: Volker Lendecke <vl@samba.org>
+Date: Tue, 3 Dec 2013 13:20:17 +0100
+Subject: [PATCH 1/3] PATCHSET15: smbd: Fix regression for the dropbox case.
+
+We need to allow to save a file to a directory with perm -wx.
+
+BUG: https://bugzilla.samba.org/show_bug.cgi?id=10297
+
+Signed-off-by: Volker Lendecke <vl@samba.org>
+Reviewed-by: Jeremy Allison <jra@samba.org>
+Reviewed-by: Andreas Schneider <asn@samba.org>
+(cherry picked from commit 5b49fe24c906cbae12beff7a1b45de6809258cab)
+---
+ source3/smbd/filename.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
+index 8ef0c0a..ca19369 100644
+--- a/source3/smbd/filename.c
++++ b/source3/smbd/filename.c
+@@ -716,7 +716,10 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
+                                * here.
+                                */
+                               if (errno == EACCES) {
+-                                      if (ucf_flags & UCF_CREATING_FILE) {
++                                      if ((ucf_flags & UCF_CREATING_FILE) == 0) {
++                                              status = NT_STATUS_ACCESS_DENIED;
++                                              goto fail;
++                                      } else {
+                                               /*
+                                                * This is the dropbox
+                                                * behaviour. A dropbox is a
+@@ -728,11 +731,8 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
+                                                * nevertheless want to allow
+                                                * users creating a file.
+                                                */
+-                                              status = NT_STATUS_OBJECT_PATH_NOT_FOUND;
+-                                      } else {
+-                                              status = NT_STATUS_ACCESS_DENIED;
++                                              errno = 0;
+                                       }
+-                                      goto fail;
+                               }
+                               if ((errno != 0) && (errno != ENOENT)) {
+-- 
+1.9.3
+
+
+From 38674e8f208a7e8f2ead72266292f30b7ea33c87 Mon Sep 17 00:00:00 2001
+From: Jeremy Allison <jra@samba.org>
+Date: Tue, 3 Dec 2013 10:19:09 -0800
+Subject: [PATCH 2/3] PATCHSET15: smbd: change flag name from UCF_CREATING_FILE
+ to UCF_PREP_CREATEFILE
+
+In preparation to using it for all open calls.
+
+BUG: https://bugzilla.samba.org/show_bug.cgi?id=10297
+
+Signed-off-by: Jeremy Allison <jra@samba.org>
+Reviewed-by: Volker Lendecke <vl@samba.org>
+(cherry picked from commit 874318a97868e08837a1febb1be8e8a167b5ae0f)
+---
+ source3/include/smb.h      |  2 +-
+ source3/smbd/filename.c    |  2 +-
+ source3/smbd/nttrans.c     |  4 ++--
+ source3/smbd/reply.c       | 10 +++++-----
+ source3/smbd/smb2_create.c |  2 +-
+ 5 files changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/source3/include/smb.h b/source3/include/smb.h
+index 2d04373..559e061 100644
+--- a/source3/include/smb.h
++++ b/source3/include/smb.h
+@@ -1716,7 +1716,7 @@ struct smb_file_time {
+ #define UCF_COND_ALLOW_WCARD_LCOMP    0x00000004
+ #define UCF_POSIX_PATHNAMES           0x00000008
+ #define UCF_UNIX_NAME_LOOKUP          0x00000010
+-#define UCF_CREATING_FILE             0x00000020
++#define UCF_PREP_CREATEFILE           0x00000020
+ /*
+  * smb_filename
+diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
+index ca19369..2e68e52 100644
+--- a/source3/smbd/filename.c
++++ b/source3/smbd/filename.c
+@@ -716,7 +716,7 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
+                                * here.
+                                */
+                               if (errno == EACCES) {
+-                                      if ((ucf_flags & UCF_CREATING_FILE) == 0) {
++                                      if ((ucf_flags & UCF_PREP_CREATEFILE) == 0) {
+                                               status = NT_STATUS_ACCESS_DENIED;
+                                               goto fail;
+                                       } else {
+diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
+index 4c145e0..f5da720 100644
+--- a/source3/smbd/nttrans.c
++++ b/source3/smbd/nttrans.c
+@@ -537,7 +537,7 @@ void reply_ntcreate_and_X(struct smb_request *req)
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+                               (create_disposition == FILE_CREATE)
+-                                      ? UCF_CREATING_FILE : 0,
++                                ? UCF_PREP_CREATEFILE : 0,
+                               NULL,
+                               &smb_fname);
+@@ -1167,7 +1167,7 @@ static void call_nt_transact_create(connection_struct *conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+                               (create_disposition == FILE_CREATE)
+-                                      ? UCF_CREATING_FILE : 0,
++                                ? UCF_PREP_CREATEFILE : 0,
+                               NULL,
+                               &smb_fname);
+diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
+index 0585a6e..8478031 100644
+--- a/source3/smbd/reply.c
++++ b/source3/smbd/reply.c
+@@ -1761,7 +1761,7 @@ void reply_open(struct smb_request *req)
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+                               (create_disposition == FILE_CREATE)
+-                                      ? UCF_CREATING_FILE : 0,
++                                ? UCF_PREP_CREATEFILE : 0,
+                               NULL,
+                               &smb_fname);
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -1939,7 +1939,7 @@ void reply_open_and_X(struct smb_request *req)
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+                               (create_disposition == FILE_CREATE)
+-                                      ? UCF_CREATING_FILE : 0,
++                                ? UCF_PREP_CREATEFILE : 0,
+                               NULL,
+                               &smb_fname);
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -2147,7 +2147,7 @@ void reply_mknew(struct smb_request *req)
+                               conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+-                              UCF_CREATING_FILE,
++                              UCF_PREP_CREATEFILE,
+                               NULL,
+                               &smb_fname);
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -2288,7 +2288,7 @@ void reply_ctemp(struct smb_request *req)
+               status = filename_convert(ctx, conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+-                              UCF_CREATING_FILE,
++                              UCF_PREP_CREATEFILE,
+                               NULL,
+                               &smb_fname);
+               if (!NT_STATUS_IS_OK(status)) {
+@@ -5541,7 +5541,7 @@ void reply_mkdir(struct smb_request *req)
+       status = filename_convert(ctx, conn,
+                                req->flags2 & FLAGS2_DFS_PATHNAMES,
+                                directory,
+-                               UCF_CREATING_FILE,
++                               UCF_PREP_CREATEFILE,
+                                NULL,
+                                &smb_dname);
+       if (!NT_STATUS_IS_OK(status)) {
+diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
+index 0862990..cd15852 100644
+--- a/source3/smbd/smb2_create.c
++++ b/source3/smbd/smb2_create.c
+@@ -695,7 +695,7 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
+                                         smb1req->flags2 & FLAGS2_DFS_PATHNAMES,
+                                         fname,
+                                         (in_create_disposition == FILE_CREATE) ?
+-                                              UCF_CREATING_FILE : 0,
++                                                UCF_PREP_CREATEFILE : 0,
+                                         NULL,
+                                         &smb_fname);
+               if (!NT_STATUS_IS_OK(status)) {
+-- 
+1.9.3
+
+
+From d3fb56a7239ef4173ff13f2fec2beb44402dee6b Mon Sep 17 00:00:00 2001
+From: Jeremy Allison <jra@samba.org>
+Date: Tue, 3 Dec 2013 10:21:16 -0800
+Subject: [PATCH 3/3] PATCHSET15: smbd: Always use UCF_PREP_CREATEFILE for
+ filename_convert calls to resolve a path for open.
+
+BUG: https://bugzilla.samba.org/show_bug.cgi?id=10297
+
+Signed-off-by: Jeremy Allison <jra@samba.org>
+Reviewed-by: Volker Lendecke <vl@samba.org>
+
+Autobuild-User(master): Jeremy Allison <jra@samba.org>
+Autobuild-Date(master): Mon Dec  9 21:02:21 CET 2013 on sn-devel-104
+
+(cherry picked from commit f98d10af2a05f0261611f4cabdfe274cd9fe91c0)
+---
+ source3/smbd/nttrans.c     | 6 ++----
+ source3/smbd/reply.c       | 6 ++----
+ source3/smbd/smb2_create.c | 3 +--
+ 3 files changed, 5 insertions(+), 10 deletions(-)
+
+diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
+index f5da720..f7d9b9d 100644
+--- a/source3/smbd/nttrans.c
++++ b/source3/smbd/nttrans.c
+@@ -536,8 +536,7 @@ void reply_ntcreate_and_X(struct smb_request *req)
+                               conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+-                              (create_disposition == FILE_CREATE)
+-                                ? UCF_PREP_CREATEFILE : 0,
++                              UCF_PREP_CREATEFILE,
+                               NULL,
+                               &smb_fname);
+@@ -1166,8 +1165,7 @@ static void call_nt_transact_create(connection_struct *conn,
+                               conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+-                              (create_disposition == FILE_CREATE)
+-                                ? UCF_PREP_CREATEFILE : 0,
++                              UCF_PREP_CREATEFILE,
+                               NULL,
+                               &smb_fname);
+diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
+index 8478031..1583c23 100644
+--- a/source3/smbd/reply.c
++++ b/source3/smbd/reply.c
+@@ -1760,8 +1760,7 @@ void reply_open(struct smb_request *req)
+                               conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+-                              (create_disposition == FILE_CREATE)
+-                                ? UCF_PREP_CREATEFILE : 0,
++                              UCF_PREP_CREATEFILE,
+                               NULL,
+                               &smb_fname);
+       if (!NT_STATUS_IS_OK(status)) {
+@@ -1938,8 +1937,7 @@ void reply_open_and_X(struct smb_request *req)
+                               conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               fname,
+-                              (create_disposition == FILE_CREATE)
+-                                ? UCF_PREP_CREATEFILE : 0,
++                              UCF_PREP_CREATEFILE,
+                               NULL,
+                               &smb_fname);
+       if (!NT_STATUS_IS_OK(status)) {
+diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
+index cd15852..d0cda33 100644
+--- a/source3/smbd/smb2_create.c
++++ b/source3/smbd/smb2_create.c
+@@ -694,8 +694,7 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
+                                         smb1req->conn,
+                                         smb1req->flags2 & FLAGS2_DFS_PATHNAMES,
+                                         fname,
+-                                        (in_create_disposition == FILE_CREATE) ?
+-                                                UCF_PREP_CREATEFILE : 0,
++                                        UCF_PREP_CREATEFILE,
+                                         NULL,
+                                         &smb_fname);
+               if (!NT_STATUS_IS_OK(status)) {
+-- 
+1.9.3
+