The branch, master has been updated
       via  9e93dac Remember to free the second temporary string.
       via  916e828 Fix bug 7950 - Samba 3.5.x fails 
BASE-CREATEX_SHAREMODES_DIR smbtorture4 test We need to revalidate the pathname 
once re-constructed from a root fsp.
      from  5ec284d build: moved librpc/rpc/*.c into a rpccommon library

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 9e93dacfc6020deab9f15353ae32512a58e7b4b8
Author: Jeremy Allison <j...@samba.org>
Date:   Wed Feb 23 18:32:35 2011 -0800

    Remember to free the second temporary string.
    
    Autobuild-User: Jeremy Allison <j...@samba.org>
    Autobuild-Date: Thu Feb 24 04:17:49 CET 2011 on sn-devel-104

commit 916e82823b56a70d7761644b38a250ea8c38e204
Author: Jeremy Allison <j...@samba.org>
Date:   Wed Feb 23 18:24:41 2011 -0800

    Fix bug 7950 - Samba 3.5.x fails BASE-CREATEX_SHAREMODES_DIR smbtorture4 
test
    We need to revalidate the pathname once re-constructed from a root fsp.
    
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/include/proto.h      |    3 ++-
 source3/modules/onefs_open.c |    4 +++-
 source3/smbd/open.c          |   23 +++++++++++++++++------
 3 files changed, 22 insertions(+), 8 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index c2385c9..fe4a2c1 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4890,7 +4890,8 @@ NTSTATUS create_file_default(connection_struct *conn,
 NTSTATUS get_relative_fid_filename(connection_struct *conn,
                                   struct smb_request *req,
                                   uint16_t root_dir_fid,
-                                  struct smb_filename *smb_fname);
+                                  const struct smb_filename *smb_fname,
+                                  struct smb_filename **smb_fname_out);
 
 /* The following definitions come from smbd/oplock.c  */
 
diff --git a/source3/modules/onefs_open.c b/source3/modules/onefs_open.c
index fb4b89a..c9372e5 100644
--- a/source3/modules/onefs_open.c
+++ b/source3/modules/onefs_open.c
@@ -2093,11 +2093,13 @@ NTSTATUS onefs_create_file(vfs_handle_struct *handle,
 
        /* Get the file name if root_dir_fid was specified. */
        if (root_dir_fid != 0) {
+               struct smb_filename *smb_fname_out = NULL;
                status = get_relative_fid_filename(conn, req, root_dir_fid,
-                                                  smb_fname);
+                                                  smb_fname, &smb_fname_out);
                if (!NT_STATUS_IS_OK(status)) {
                        goto fail;
                }
+               smb_fname = smb_fname_out;
        }
 
        /* All file access must go through check_name() */
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 2c7764a..cd3fb06 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -3431,7 +3431,8 @@ static NTSTATUS create_file_unixpath(connection_struct 
*conn,
 NTSTATUS get_relative_fid_filename(connection_struct *conn,
                                   struct smb_request *req,
                                   uint16_t root_dir_fid,
-                                  struct smb_filename *smb_fname)
+                                  const struct smb_filename *smb_fname,
+                                  struct smb_filename **smb_fname_out)
 {
        files_struct *dir_fsp;
        char *parent_fname = NULL;
@@ -3519,19 +3520,27 @@ NTSTATUS get_relative_fid_filename(connection_struct 
*conn,
                }
        }
 
-       new_base_name = talloc_asprintf(smb_fname, "%s%s", parent_fname,
+       new_base_name = talloc_asprintf(talloc_tos(), "%s%s", parent_fname,
                                        smb_fname->base_name);
        if (new_base_name == NULL) {
                status = NT_STATUS_NO_MEMORY;
                goto out;
        }
 
-       TALLOC_FREE(smb_fname->base_name);
-       smb_fname->base_name = new_base_name;
-       status = NT_STATUS_OK;
+       status = filename_convert(req,
+                               conn,
+                               req->flags2 & FLAGS2_DFS_PATHNAMES,
+                               new_base_name,
+                               0,
+                               NULL,
+                               smb_fname_out);
+       if (!NT_STATUS_IS_OK(status)) {
+               goto out;
+       }
 
  out:
        TALLOC_FREE(parent_fname);
+       TALLOC_FREE(new_base_name);
        return status;
 }
 
@@ -3579,11 +3588,13 @@ NTSTATUS create_file_default(connection_struct *conn,
         */
 
        if (root_dir_fid != 0) {
+               struct smb_filename *smb_fname_out = NULL;
                status = get_relative_fid_filename(conn, req, root_dir_fid,
-                                                  smb_fname);
+                                                  smb_fname, &smb_fname_out);
                if (!NT_STATUS_IS_OK(status)) {
                        goto fail;
                }
+               smb_fname = smb_fname_out;
        }
 
        /*


-- 
Samba Shared Repository

Reply via email to