[SCM] Samba Shared Repository - branch v3-5-test updated

Karolin Seeger kseeger at samba.org
Tue Mar 1 13:28:47 MST 2011


The branch, v3-5-test has been updated
       via  203b4aa 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  e20d2b7 WHATSNEW: Start release notes for 3.5.8.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-5-test


- Log -----------------------------------------------------------------
commit 203b4aa318ce2aa64812006ed94a1e4e1becf66f
Author: Jeremy Allison <jra at 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.
    (cherry picked from commit 916e82823b56a70d7761644b38a250ea8c38e204)

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

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


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index ce33b70..ef80b92 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6663,7 +6663,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 2b4e106..a3b919f 100644
--- a/source3/modules/onefs_open.c
+++ b/source3/modules/onefs_open.c
@@ -2094,11 +2094,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 f7ed495..bd748f9 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -3233,7 +3233,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;
@@ -3321,16 +3322,23 @@ 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);
@@ -3377,11 +3385,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


More information about the samba-cvs mailing list