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

Karolin Seeger kseeger at samba.org
Mon Apr 12 01:18:14 MDT 2010


The branch, v3-5-test has been updated
       via  d614655... Fix bug #7339 - MSDFS is non-functional in 3.5.x
      from  827084b... WHATSNEW: Start release notes for Samba 3.5.3.

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


- Log -----------------------------------------------------------------
commit d614655f918fdbafe4520e9cc4d5de82e15b7d7d
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Apr 8 20:32:36 2010 -0700

    Fix bug #7339 - MSDFS is non-functional in 3.5.x
    
    In the refactoring around filename_convert, the split between the functions
    resolve_dfspath() and resolve_dfspath_wcard() was lost, leaving us only with
    resolve_dfspath_wcard().
    
    Internally resolve_dfspath_wcard() calls dfs_redirect() only with a
    "allow_wcards" flag of true, wheras the old resolve_dfspath() would call with a
    value of false. The loss of this case causes dfs_redirect to always masquerade
    DFS links as directories, even when they are being queried directly by a trans2
    QPATHINFO call. We should only masquerade DFS links as directories when called
    from a SMBsearch or trans2 findfirst/findnext - which was the intent of the
    "allow_wcards" flag.
    
    This patch adds back an allow_wcards bool parameter to
    resolve_dfspath_wcard(). This bool is set from the state of the ucf_flags when
    filename_convert() is called.
    
    I will follow this up with a new smbclient-based torture test that will prevent
    us from ever regressing our DFS support again.
    
    Jeremy.
    (cherry picked from commit 358781559526f962c96c1af88cd104946c507d05)

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

Summary of changes:
 source3/include/proto.h |    1 +
 source3/smbd/filename.c |    2 ++
 source3/smbd/msdfs.c    |    3 ++-
 source3/smbd/trans2.c   |    1 +
 4 files changed, 6 insertions(+), 1 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/include/proto.h b/source3/include/proto.h
index 28b7f7c..31d0aa6 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6481,6 +6481,7 @@ NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx,
 				connection_struct *conn,
 				bool dfs_pathnames,
 				const char *name_in,
+				bool allow_wcards,
 				char **pp_name_out,
 				bool *ppath_contains_wcard);
 NTSTATUS create_conn_struct(TALLOC_CTX *ctx,
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index ab79dfd..154d34a 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -1125,6 +1125,7 @@ NTSTATUS filename_convert(TALLOC_CTX *ctx,
 				struct smb_filename **pp_smb_fname)
 {
 	NTSTATUS status;
+	bool allow_wcards = (ucf_flags & (UCF_COND_ALLOW_WCARD_LCOMP|UCF_ALWAYS_ALLOW_WCARD_LCOMP));
 	char *fname = NULL;
 
 	*pp_smb_fname = NULL;
@@ -1132,6 +1133,7 @@ NTSTATUS filename_convert(TALLOC_CTX *ctx,
 	status = resolve_dfspath_wcard(ctx, conn,
 				dfs_path,
 				name_in,
+				allow_wcards,
 				&fname,
 				ppath_contains_wcard);
 	if (!NT_STATUS_IS_OK(status)) {
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index dcef75e..6dfa886 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -1738,6 +1738,7 @@ NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx,
 				connection_struct *conn,
 				bool dfs_pathnames,
 				const char *name_in,
+				bool allow_wcards,
 				char **pp_name_out,
 				bool *ppath_contains_wcard)
 {
@@ -1748,7 +1749,7 @@ NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx,
 		status = dfs_redirect(ctx,
 					conn,
 					name_in,
-					True,
+					allow_wcards,
 					pp_name_out,
 					&path_contains_wcard);
 
diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c
index 5620a2f..36b2749 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -5933,6 +5933,7 @@ static NTSTATUS smb_file_rename_information(connection_struct *conn,
 	status = resolve_dfspath_wcard(ctx, conn,
 				       req->flags2 & FLAGS2_DFS_PATHNAMES,
 				       newname,
+				       true,
 				       &newname,
 				       &dest_has_wcard);
 	if (!NT_STATUS_IS_OK(status)) {


-- 
Samba Shared Repository


More information about the samba-cvs mailing list