The branch, master has been updated
       via  3587815... Fix bug #7339 - MSDFS is non-functional in 3.5.x
      from  8126c78... s4/torture: Suppress Valgrind warnings

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


- Log -----------------------------------------------------------------
commit 358781559526f962c96c1af88cd104946c507d05
Author: Jeremy Allison <j...@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.

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

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 7dcdeac..a3435a8 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -6485,6 +6485,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 0ee9be3..06b454a 100644
--- a/source3/smbd/trans2.c
+++ b/source3/smbd/trans2.c
@@ -6038,6 +6038,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

Reply via email to