The branch, master has been updated
       via  4c234a9 s3: smbd: Correctly identify a snapshot path using 
UCF_GMT_PATHNAME.
       via  aa72d09 s3: smbd: Add UCF_GMT_PATHNAME, which represents 
FLAGS2_REPARSE_PATH.
       via  1c9183b s3: smbd: Fix up the ucf_flags correctly in 
smb_file_rename_information().
       via  f2f936a s3: smbd: We can now remove the 'bool dfs_path' parameter 
from filename_convert().
       via  0fbf5b6 s3: smbd: Add UCF_DFS_PATHNAME which tracks the flags2 
FLAGS2_DFS_PATHNAMES bit.
       via  29ec474 s3: smbd: In ntrename OR in ucf_flags, don't overwrite.
       via  4910feb s3: smbd: Always use ucf_flags_from_smb_request() in place 
of checking by hand (in most cases).
       via  f5866c6 s3: smbd: Split out ucf_flags_from_smb_request() from 
filename_create_ucf_flags().
       via  8a2aa27 s3: smbd: Make it clear we only overwrite 
*ppath_contains_wcard if resolve_dfspath_wcard() detected a wildcard.
       via  0e1c068 s3: smbd: Remove ugly use of discard_const that previously 
was hidden in resolve_dfspath_wcard().
       via  2647eed s3: smbd: Remove bool dfs_pathnames paramter from 
resolve_dfspath_wcard().
      from  2732411 s4:libcli/ldap: just use gensec_update() in ldap_bind_sasl()

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


- Log -----------------------------------------------------------------
commit 4c234a90a9f5eed578857368c35b7b518b98a8f7
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 13:28:23 2017 -0700

    s3: smbd: Correctly identify a snapshot path using UCF_GMT_PATHNAME.
    
    All our client code already does this correctly for @GMT names.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>
    
    Autobuild-User(master): Jeremy Allison <[email protected]>
    Autobuild-Date(master): Mon May 22 22:49:17 CEST 2017 on sn-devel-144

commit aa72d09b3130ef61f1be5713b8f2c016ac5bc551
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 13:24:26 2017 -0700

    s3: smbd: Add UCF_GMT_PATHNAME, which represents FLAGS2_REPARSE_PATH.
    
    This must be set by a client to use shadow copy (@GMT) paths.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 1c9183bb381fa60e2118f5f874435c3a0f93e22d
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 13:22:36 2017 -0700

    s3: smbd: Fix up the ucf_flags correctly in smb_file_rename_information().
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit f2f936a961e184b6760400de9b0b72820c690b6e
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 12:29:50 2017 -0700

    s3: smbd: We can now remove the 'bool dfs_path' parameter from 
filename_convert().
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 0fbf5b644d67df2bd47691f4240dbcaffaecc407
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 12:18:58 2017 -0700

    s3: smbd: Add UCF_DFS_PATHNAME which tracks the flags2 FLAGS2_DFS_PATHNAMES 
bit.
    
    Set inside ucf_flags_from_smb_request(). This will allow us to
    remove the req->flags2 & FLAGS2_DFS_PATHNAMES parameter from
    filename_convert().
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 29ec4744542230c93c209acfe2a5d6144707b332
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 12:08:57 2017 -0700

    s3: smbd: In ntrename OR in ucf_flags, don't overwrite.
    
    This isn't worth a bug backport as right now the only flag that
    could be overwritten is the UCF_POSIX_PATHNAMES flag, and for
    a POSIX connection the client will use posix rename, not an
    ntrename.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 4910febdac9cf282597349e85610e582001a3c54
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 12:08:00 2017 -0700

    s3: smbd: Always use ucf_flags_from_smb_request() in place of checking by 
hand (in most cases).
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit f5866c66a44703000edf99ecae4429e877332ccd
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 11:56:39 2017 -0700

    s3: smbd: Split out ucf_flags_from_smb_request() from 
filename_create_ucf_flags().
    
    We will use this elsewhere in later commits.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 8a2aa27f745ec1d611f3ece307cea15d0002df9e
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 11:41:10 2017 -0700

    s3: smbd: Make it clear we only overwrite *ppath_contains_wcard if 
resolve_dfspath_wcard() detected a wildcard.
    
    The API for this function specifies that *ppath_contains_wcard
    must already have been initialized on entry to filename_convert()
    (not a great design, but that's the way it is currently).
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 0e1c0684c2b3406cd04b817a8def0bd080ce0f02
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 11:36:56 2017 -0700

    s3: smbd: Remove ugly use of discard_const that previously was hidden in 
resolve_dfspath_wcard().
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

commit 2647eedb6151a0e06b62412ff5485fe7a83b7279
Author: Jeremy Allison <[email protected]>
Date:   Thu May 18 11:34:33 2017 -0700

    s3: smbd: Remove bool dfs_pathnames paramter from resolve_dfspath_wcard().
    
    Start cleaning up the pathname parsing to move flags2 checks into UCF_FLAGS
    function.
    
    NB. This now only sets *ppath_contains_wcard inside resolve_dfspath_wcard()
    if dfs_redirect() sets path_contains_wcard to true, which is a change
    from the previous code which could potentially set *ppath_contains_wcard
    to an uninitialized value if dfs_redirect() returned without setting
    path_contains_wcard.
    
    Signed-off-by: Jeremy Allison <[email protected]>
    Reviewed-by: Uri Simchoni <[email protected]>

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

Summary of changes:
 source3/rpc_server/srvsvc/srv_srvsvc_nt.c |  2 -
 source3/smbd/filename.c                   | 62 ++++++++++++++++++++-----------
 source3/smbd/msdfs.c                      | 34 +++++++----------
 source3/smbd/nttrans.c                    | 12 ++----
 source3/smbd/open.c                       |  4 +-
 source3/smbd/proto.h                      |  3 +-
 source3/smbd/reply.c                      | 47 +++++++++--------------
 source3/smbd/smb2_create.c                |  8 +++-
 source3/smbd/smb2_query_directory.c       |  1 -
 source3/smbd/smbd.h                       | 10 +++++
 source3/smbd/trans2.c                     | 46 ++++++++++-------------
 11 files changed, 113 insertions(+), 116 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c 
b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
index 513ef17..fdf42ea 100644
--- a/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
+++ b/source3/rpc_server/srvsvc/srv_srvsvc_nt.c
@@ -2358,7 +2358,6 @@ WERROR _srvsvc_NetGetFileSecurity(struct pipes_struct *p,
 
        nt_status = filename_convert(talloc_tos(),
                                        conn,
-                                       false,
                                        r->in.file,
                                        ucf_flags,
                                        NULL,
@@ -2508,7 +2507,6 @@ WERROR _srvsvc_NetSetFileSecurity(struct pipes_struct *p,
 
        nt_status = filename_convert(talloc_tos(),
                                        conn,
-                                       false,
                                        r->in.file,
                                        ucf_flags,
                                        NULL,
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index 2d85e8d..084849d 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -30,14 +30,31 @@
 #include "smbd/smbd.h"
 #include "smbd/globals.h"
 
-uint32_t filename_create_ucf_flags(struct smb_request *req, uint32_t 
create_disposition)
+uint32_t ucf_flags_from_smb_request(struct smb_request *req)
 {
        uint32_t ucf_flags = 0;
 
-       if (req != NULL && req->posix_pathnames) {
-               ucf_flags |= UCF_POSIX_PATHNAMES;
+       if (req != NULL) {
+               if (req->posix_pathnames) {
+                       ucf_flags |= UCF_POSIX_PATHNAMES;
+               }
+               if (req->flags2 & FLAGS2_DFS_PATHNAMES) {
+                       ucf_flags |= UCF_DFS_PATHNAME;
+               }
+               if (req->flags2 & FLAGS2_REPARSE_PATH) {
+                       ucf_flags |= UCF_GMT_PATHNAME;
+               }
        }
 
+       return ucf_flags;
+}
+
+uint32_t filename_create_ucf_flags(struct smb_request *req, uint32_t 
create_disposition)
+{
+       uint32_t ucf_flags = 0;
+
+       ucf_flags |= ucf_flags_from_smb_request(req);
+
        switch (create_disposition) {
        case FILE_OPEN:
        case FILE_OVERWRITE:
@@ -417,6 +434,7 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
        bool allow_wcard_last_component =
            (ucf_flags & UCF_ALWAYS_ALLOW_WCARD_LCOMP);
        bool save_last_component = ucf_flags & UCF_SAVE_LCOMP;
+       bool snapshot_path = (ucf_flags & UCF_GMT_PATHNAME);
        NTSTATUS status;
        int ret = -1;
 
@@ -499,7 +517,7 @@ NTSTATUS unix_convert(TALLOC_CTX *ctx,
        }
 
        /* Canonicalize any @GMT- paths. */
-       if (posix_pathnames == false) {
+       if (snapshot_path) {
                status = canonicalize_snapshot_path(smb_fname);
                if (!NT_STATUS_IS_OK(status)) {
                        goto err;
@@ -1521,7 +1539,6 @@ static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx,
  *
  * @param ctx          talloc_ctx to allocate memory with.
  * @param conn         connection struct for vfs calls.
- * @param dfs_path     Whether this path requires dfs resolution.
  * @param smbreq       SMB request if we're using privileges.
  * @param name_in      The unconverted name.
  * @param ucf_flags    flags to pass through to unix_convert().
@@ -1538,7 +1555,6 @@ static NTSTATUS build_stream_path(TALLOC_CTX *mem_ctx,
  */
 static NTSTATUS filename_convert_internal(TALLOC_CTX *ctx,
                                connection_struct *conn,
-                               bool dfs_path,
                                struct smb_request *smbreq,
                                const char *name_in,
                                uint32_t ucf_flags,
@@ -1546,23 +1562,30 @@ static NTSTATUS filename_convert_internal(TALLOC_CTX 
*ctx,
                                struct smb_filename **pp_smb_fname)
 {
        NTSTATUS status;
-       char *fname = NULL;
 
        *pp_smb_fname = NULL;
 
-       status = resolve_dfspath_wcard(ctx, conn,
-                               dfs_path,
+       if (ucf_flags & UCF_DFS_PATHNAME) {
+               bool path_contains_wcard = false;
+               char *fname = NULL;
+               status = resolve_dfspath_wcard(ctx, conn,
                                name_in,
                                ucf_flags,
                                !conn->sconn->using_smb2,
                                &fname,
-                               ppath_contains_wcard);
-       if (!NT_STATUS_IS_OK(status)) {
-               DEBUG(10,("filename_convert_internal: resolve_dfspath failed "
-                       "for name %s with %s\n",
-                       name_in,
-                       nt_errstr(status) ));
-               return status;
+                               &path_contains_wcard);
+               if (!NT_STATUS_IS_OK(status)) {
+                       DEBUG(10,("filename_convert_internal: resolve_dfspath "
+                               "failed for name %s with %s\n",
+                               name_in,
+                               nt_errstr(status) ));
+                       return status;
+               }
+               name_in = fname;
+               if (ppath_contains_wcard != NULL && path_contains_wcard) {
+                       *ppath_contains_wcard = path_contains_wcard;
+               }
+               ucf_flags &= ~UCF_DFS_PATHNAME;
        }
 
        if (is_fake_file_path(name_in)) {
@@ -1588,11 +1611,11 @@ static NTSTATUS filename_convert_internal(TALLOC_CTX 
*ctx,
                ucf_flags |= UCF_ALWAYS_ALLOW_WCARD_LCOMP;
        }
 
-       status = unix_convert(ctx, conn, fname, pp_smb_fname, ucf_flags);
+       status = unix_convert(ctx, conn, name_in, pp_smb_fname, ucf_flags);
        if (!NT_STATUS_IS_OK(status)) {
                DEBUG(10,("filename_convert_internal: unix_convert failed "
                        "for name %s with %s\n",
-                       fname,
+                       name_in,
                        nt_errstr(status) ));
                return status;
        }
@@ -1627,7 +1650,6 @@ static NTSTATUS filename_convert_internal(TALLOC_CTX *ctx,
 
 NTSTATUS filename_convert(TALLOC_CTX *ctx,
                                connection_struct *conn,
-                               bool dfs_path,
                                const char *name_in,
                                uint32_t ucf_flags,
                                bool *ppath_contains_wcard,
@@ -1635,7 +1657,6 @@ NTSTATUS filename_convert(TALLOC_CTX *ctx,
 {
        return filename_convert_internal(ctx,
                                        conn,
-                                       dfs_path,
                                        NULL,
                                        name_in,
                                        ucf_flags,
@@ -1658,7 +1679,6 @@ NTSTATUS filename_convert_with_privilege(TALLOC_CTX *ctx,
 {
        return filename_convert_internal(ctx,
                                        conn,
-                                       smbreq->flags2 & FLAGS2_DFS_PATHNAMES,
                                        smbreq,
                                        name_in,
                                        ucf_flags,
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index 61538ce..c22cd1e 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -1669,35 +1669,27 @@ struct junction_map *enum_msdfs_links(TALLOC_CTX *ctx, 
size_t *p_num_jn)
 
 NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx,
                                connection_struct *conn,
-                               bool dfs_pathnames,
                                const char *name_in,
                                uint32_t ucf_flags,
                                bool allow_broken_path,
                                char **pp_name_out,
                                bool *ppath_contains_wcard)
 {
-       bool path_contains_wcard;
+       bool path_contains_wcard = false;
        NTSTATUS status = NT_STATUS_OK;
 
-       if (dfs_pathnames) {
-               status = dfs_redirect(ctx,
-                                       conn,
-                                       name_in,
-                                       ucf_flags,
-                                       allow_broken_path,
-                                       pp_name_out,
-                                       &path_contains_wcard);
-
-               if (NT_STATUS_IS_OK(status) && ppath_contains_wcard != NULL) {
-                       *ppath_contains_wcard = path_contains_wcard;
-               }
-       } else {
-               /*
-                * Cheat and just return a copy of the in ptr.
-                * Once srvstr_get_path() uses talloc it'll
-                * be a talloced ptr anyway.
-                */
-               *pp_name_out = discard_const_p(char, name_in);
+       status = dfs_redirect(ctx,
+                               conn,
+                               name_in,
+                               ucf_flags,
+                               allow_broken_path,
+                               pp_name_out,
+                               &path_contains_wcard);
+
+       if (NT_STATUS_IS_OK(status) &&
+                               ppath_contains_wcard != NULL &&
+                               path_contains_wcard) {
+               *ppath_contains_wcard = path_contains_wcard;
        }
        return status;
 }
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index a5fc625..7b7f205 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -538,7 +538,6 @@ void reply_ntcreate_and_X(struct smb_request *req)
        ucf_flags = filename_create_ucf_flags(req, create_disposition);
        status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -1111,7 +1110,6 @@ static void call_nt_transact_create(connection_struct 
*conn,
        ucf_flags = filename_create_ucf_flags(req, create_disposition);
        status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -1573,8 +1571,8 @@ void reply_ntrename(struct smb_request *req)
        bool src_has_wcard = False;
        bool dest_has_wcard = False;
        uint32_t attrs;
-       uint32_t ucf_flags_src = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 
0);
-       uint32_t ucf_flags_dst = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 
0);
+       uint32_t ucf_flags_src = ucf_flags_from_smb_request(req);
+       uint32_t ucf_flags_dst = ucf_flags_from_smb_request(req);
        uint16_t rename_type;
        TALLOC_CTX *ctx = talloc_tos();
        bool stream_rename = false;
@@ -1627,13 +1625,12 @@ void reply_ntrename(struct smb_request *req)
         * destination's last component.
         */
        if (rename_type == RENAME_FLAG_RENAME) {
-               ucf_flags_src = UCF_COND_ALLOW_WCARD_LCOMP;
-               ucf_flags_dst = UCF_COND_ALLOW_WCARD_LCOMP | UCF_SAVE_LCOMP;
+               ucf_flags_src |= UCF_COND_ALLOW_WCARD_LCOMP;
+               ucf_flags_dst |= UCF_COND_ALLOW_WCARD_LCOMP | UCF_SAVE_LCOMP;
        }
 
        /* rename_internals() calls unix_convert(), so don't call it here. */
        status = filename_convert(ctx, conn,
-                                 req->flags2 & FLAGS2_DFS_PATHNAMES,
                                  oldname,
                                  ucf_flags_src,
                                  NULL,
@@ -1651,7 +1648,6 @@ void reply_ntrename(struct smb_request *req)
        }
 
        status = filename_convert(ctx, conn,
-                                 req->flags2 & FLAGS2_DFS_PATHNAMES,
                                  newname,
                                  ucf_flags_dst,
                                  &dest_has_wcard,
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 50f8a5e..49932e9 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -5366,8 +5366,7 @@ NTSTATUS get_relative_fid_filename(connection_struct 
*conn,
        files_struct *dir_fsp;
        char *parent_fname = NULL;
        char *new_base_name = NULL;
-       uint32_t ucf_flags = ((req != NULL && req->posix_pathnames) ?
-                       UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = ucf_flags_from_smb_request(req);
        NTSTATUS status;
 
        if (root_dir_fid == 0 || !smb_fname) {
@@ -5460,7 +5459,6 @@ NTSTATUS get_relative_fid_filename(connection_struct 
*conn,
 
        status = filename_convert(req,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                new_base_name,
                                ucf_flags,
                                NULL,
diff --git a/source3/smbd/proto.h b/source3/smbd/proto.h
index 19abf7e..0be2a49 100644
--- a/source3/smbd/proto.h
+++ b/source3/smbd/proto.h
@@ -338,6 +338,7 @@ int fsp_stat(files_struct *fsp);
 
 /* The following definitions come from smbd/filename.c  */
 
+uint32_t ucf_flags_from_smb_request(struct smb_request *req);
 uint32_t filename_create_ucf_flags(struct smb_request *req, uint32_t 
create_disposition);
 NTSTATUS unix_convert(TALLOC_CTX *ctx,
                      connection_struct *conn,
@@ -350,7 +351,6 @@ int get_real_filename(connection_struct *conn, const char 
*path,
                      char **found_name);
 NTSTATUS filename_convert(TALLOC_CTX *mem_ctx,
                        connection_struct *conn,
-                       bool dfs_path,
                        const char *name_in,
                        uint32_t ucf_flags,
                        bool *ppath_contains_wcard,
@@ -490,7 +490,6 @@ bool remove_msdfs_link(const struct junction_map *jucn);
 struct junction_map *enum_msdfs_links(TALLOC_CTX *ctx, size_t *p_num_jn);
 NTSTATUS resolve_dfspath_wcard(TALLOC_CTX *ctx,
                                connection_struct *conn,
-                               bool dfs_pathnames,
                                const char *name_in,
                                uint32_t ucf_flags,
                                bool allow_broken_path,
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 030f011..e6fabad 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -1278,7 +1278,7 @@ void reply_checkpath(struct smb_request *req)
        struct smb_filename *smb_fname = NULL;
        char *name = NULL;
        NTSTATUS status;
-       uint32_t ucf_flags = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = ucf_flags_from_smb_request(req);
        TALLOC_CTX *ctx = talloc_tos();
 
        START_PROFILE(SMBcheckpath);
@@ -1297,7 +1297,6 @@ void reply_checkpath(struct smb_request *req)
 
        status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                name,
                                ucf_flags,
                                NULL,
@@ -1393,11 +1392,9 @@ void reply_getatr(struct smb_request *req)
                size = 0;
                mtime = 0;
        } else {
-               uint32_t ucf_flags = (req->posix_pathnames ?
-                               UCF_POSIX_PATHNAMES : 0);
+               uint32_t ucf_flags = ucf_flags_from_smb_request(req);
                status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -1480,7 +1477,7 @@ void reply_setatr(struct smb_request *req)
        time_t mtime;
        const char *p;
        NTSTATUS status;
-       uint32_t ucf_flags = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = ucf_flags_from_smb_request(req);
        TALLOC_CTX *ctx = talloc_tos();
 
        START_PROFILE(SMBsetatr);
@@ -1501,7 +1498,6 @@ void reply_setatr(struct smb_request *req)
 
        status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -1798,9 +1794,8 @@ void reply_search(struct smb_request *req)
        if (status_len == 0) {
                struct smb_filename *smb_dname = NULL;
                uint32_t ucf_flags = UCF_ALWAYS_ALLOW_WCARD_LCOMP |
-                       (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
+                       ucf_flags_from_smb_request(req);
                nt_status = filename_convert(ctx, conn,
-                                            req->flags2 & FLAGS2_DFS_PATHNAMES,
                                             path,
                                             ucf_flags,
                                             &mask_contains_wcard,
@@ -2146,7 +2141,6 @@ void reply_open(struct smb_request *req)
 
        status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -2319,7 +2313,6 @@ void reply_open_and_X(struct smb_request *req)
 
        status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -2564,7 +2557,6 @@ void reply_mknew(struct smb_request *req)
        ucf_flags = filename_create_ucf_flags(req, create_disposition);
        status = filename_convert(ctx,
                                conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -2701,7 +2693,6 @@ void reply_ctemp(struct smb_request *req)
 
                ucf_flags = filename_create_ucf_flags(req, FILE_CREATE);
                status = filename_convert(ctx, conn,
-                               req->flags2 & FLAGS2_DFS_PATHNAMES,
                                fname,
                                ucf_flags,
                                NULL,
@@ -3220,7 +3211,7 @@ void reply_unlink(struct smb_request *req)
        NTSTATUS status;
        bool path_contains_wcard = False;
        uint32_t ucf_flags = UCF_COND_ALLOW_WCARD_LCOMP |
-                       (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
+                       ucf_flags_from_smb_request(req);
        TALLOC_CTX *ctx = talloc_tos();
 
        START_PROFILE(SMBunlink);
@@ -3241,7 +3232,6 @@ void reply_unlink(struct smb_request *req)
        }
 
        status = filename_convert(ctx, conn,
-                                 req->flags2 & FLAGS2_DFS_PATHNAMES,
                                  name,
                                  ucf_flags,
                                  &path_contains_wcard,
@@ -6152,7 +6142,6 @@ void reply_mkdir(struct smb_request *req)
 
        ucf_flags = filename_create_ucf_flags(req, FILE_CREATE);
        status = filename_convert(ctx, conn,
-                                req->flags2 & FLAGS2_DFS_PATHNAMES,
                                 directory,
                                 ucf_flags,
                                 NULL,
@@ -6210,7 +6199,7 @@ void reply_rmdir(struct smb_request *req)
        TALLOC_CTX *ctx = talloc_tos();
        files_struct *fsp = NULL;
        int info = 0;
-       uint32_t ucf_flags = (req->posix_pathnames ? UCF_POSIX_PATHNAMES : 0);
+       uint32_t ucf_flags = ucf_flags_from_smb_request(req);
        struct smbd_server_connection *sconn = req->sconn;
 
        START_PROFILE(SMBrmdir);
@@ -6223,7 +6212,6 @@ void reply_rmdir(struct smb_request *req)
        }
 
        status = filename_convert(ctx, conn,
-                                req->flags2 & FLAGS2_DFS_PATHNAMES,
                                 directory,
                                 ucf_flags,
                                 NULL,
@@ -7294,12 +7282,15 @@ void reply_mv(struct smb_request *req)
        TALLOC_CTX *ctx = talloc_tos();
        struct smb_filename *smb_fname_src = NULL;
        struct smb_filename *smb_fname_dst = NULL;
-       uint32_t src_ucf_flags = (req->posix_pathnames ?
-               (UCF_UNIX_NAME_LOOKUP|UCF_POSIX_PATHNAMES) :
-               UCF_COND_ALLOW_WCARD_LCOMP);
-       uint32_t dst_ucf_flags = UCF_SAVE_LCOMP |
-               (req->posix_pathnames ? UCF_POSIX_PATHNAMES :
-                UCF_COND_ALLOW_WCARD_LCOMP);
+       uint32_t src_ucf_flags = ucf_flags_from_smb_request(req) |
+               (req->posix_pathnames ?
+                       UCF_UNIX_NAME_LOOKUP :
+                       UCF_COND_ALLOW_WCARD_LCOMP);
+       uint32_t dst_ucf_flags = ucf_flags_from_smb_request(req) |
+               UCF_SAVE_LCOMP |
+               (req->posix_pathnames ?
+                       0 :
+                       UCF_COND_ALLOW_WCARD_LCOMP);
        bool stream_rename = false;
 
        START_PROFILE(SMBmv);
@@ -7340,7 +7331,6 @@ void reply_mv(struct smb_request *req)
 
        status = filename_convert(ctx,
                                  conn,
-                                 req->flags2 & FLAGS2_DFS_PATHNAMES,
                                  name,
                                  src_ucf_flags,
                                  &src_has_wcard,
@@ -7358,7 +7348,6 @@ void reply_mv(struct smb_request *req)
 
        status = filename_convert(ctx,
                                  conn,
-                                 req->flags2 & FLAGS2_DFS_PATHNAMES,


-- 
Samba Shared Repository

Reply via email to