[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Mon May 22 20:50:02 UTC 2017


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 <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Mon May 22 22:49:17 CEST 2017 on sn-devel-144

commit aa72d09b3130ef61f1be5713b8f2c016ac5bc551
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit 1c9183bb381fa60e2118f5f874435c3a0f93e22d
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit f2f936a961e184b6760400de9b0b72820c690b6e
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit 0fbf5b644d67df2bd47691f4240dbcaffaecc407
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit 29ec4744542230c93c209acfe2a5d6144707b332
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit 4910febdac9cf282597349e85610e582001a3c54
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit f5866c66a44703000edf99ecae4429e877332ccd
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit 8a2aa27f745ec1d611f3ece307cea15d0002df9e
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit 0e1c0684c2b3406cd04b817a8def0bd080ce0f02
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

commit 2647eedb6151a0e06b62412ff5485fe7a83b7279
Author: Jeremy Allison <jra at samba.org>
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 <jra at samba.org>
    Reviewed-by: Uri Simchoni <uri at samba.org>

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

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



More information about the samba-cvs mailing list