[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue Feb 1 20:05:01 UTC 2022


The branch, master has been updated
       via  95c7d23462b vfs: Simplify fake_acls_stat() with an early return
       via  e93f46357fd smbd: Simplify reopen_from_fsp() with an early return
       via  1d6762d86b9 smbd: copy_access_posix_acl() just needs fsps these days
       via  a1d5ae30ed9 smbd: chmod_acl_internals() does not need connection_struct anymore
       via  ea8a6537543 smbd: Make directory_has_default_posix_acl() just take "dirfsp"
       via  191c15f5ef7 smbd: Modernize a debug statement
       via  888275eee2d torture: Align an integer type
       via  69f2352c494 mdssvc: Align an integer type
      from  2b2b41c8682 s3: smbd: Add two new functions in a new file, smb2_posix.c: smb2_posix_cc_info(), store_smb2_posix_info()

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


- Log -----------------------------------------------------------------
commit 95c7d23462b5b69ff852182a4922119279f3432d
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jan 18 17:55:04 2022 +0100

    vfs: Simplify fake_acls_stat() with an early return
    
    Review with "git di -b"
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Tue Feb  1 20:04:44 UTC 2022 on sn-devel-184

commit e93f46357fd047c492e2582ee0bab2a0731e7bde
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Dec 30 15:59:33 2021 +0100

    smbd: Simplify reopen_from_fsp() with an early return
    
    Review with git show -b
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 1d6762d86b9e4cdfbdd85657038a332392cd29ce
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jan 24 17:37:37 2022 +0100

    smbd: copy_access_posix_acl() just needs fsps these days
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit a1d5ae30ed9f38118077e9b208ccc2d1cc7918d1
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jan 24 17:34:23 2022 +0100

    smbd: chmod_acl_internals() does not need connection_struct anymore
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit ea8a653754350f7a3e28dd3c62fc1796017b125f
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jan 24 17:32:08 2022 +0100

    smbd: Make directory_has_default_posix_acl() just take "dirfsp"
    
    conn is not referenced anymore, and we only need the files_struct
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 191c15f5ef77ca3d1ea3ac0e0b6ccc3085c8735d
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jan 27 20:34:28 2022 +0100

    smbd: Modernize a debug statement
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 888275eee2d582af4d42e86b62ce8ffda3e014bd
Author: Volker Lendecke <vl at samba.org>
Date:   Thu Jan 27 21:52:31 2022 +0100

    torture: Align an integer type
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 69f2352c4942a761ae5c61589ac7ce93ebfc8f93
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Jan 31 08:57:41 2022 +0100

    mdssvc: Align an integer type
    
    In libjansson 2.13.1 json_array_size() returns a size_t
    
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 source3/modules/vfs_fake_acls.c       | 164 +++++++++++++++++-----------------
 source3/rpc_server/mdssvc/mdssvc_es.c |   4 +-
 source3/smbd/open.c                   |  32 +++----
 source3/smbd/posix_acls.c             |  39 ++++----
 source3/smbd/smb2_server.c            |   6 +-
 source4/torture/smb2/create.c         |   6 +-
 6 files changed, 127 insertions(+), 124 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_fake_acls.c b/source3/modules/vfs_fake_acls.c
index 441e22ea3f6..25dc12f2c4c 100644
--- a/source3/modules/vfs_fake_acls.c
+++ b/source3/modules/vfs_fake_acls.c
@@ -80,6 +80,8 @@ static int fake_acls_stat(vfs_handle_struct *handle,
 {
 	int ret = -1;
 	struct in_pathref_data *prd = NULL;
+	struct smb_filename *smb_fname_cp = NULL;
+	struct files_struct *fsp = NULL;
 
 	SMB_VFS_HANDLE_GET_DATA(handle,
 				prd,
@@ -87,99 +89,97 @@ static int fake_acls_stat(vfs_handle_struct *handle,
 				return -1);
 
 	ret = SMB_VFS_NEXT_STAT(handle, smb_fname);
-	if (ret == 0) {
-		struct smb_filename *smb_fname_cp = NULL;
-		struct files_struct *fsp = NULL;
-
-		if (smb_fname->fsp != NULL) {
-			fsp = smb_fname->fsp;
-			if (fsp->base_fsp != NULL) {
-				/*
-				 * This is a stream pathname. Use
-				 * the base_fsp to get the xattr.
-				 */
-				fsp = fsp->base_fsp;
-			}
-		} else {
-			NTSTATUS status;
+	if (ret != 0) {
+		return ret;
+	}
 
+	if (smb_fname->fsp != NULL) {
+		fsp = smb_fname->fsp;
+		if (fsp->base_fsp != NULL) {
 			/*
-			 * Ensure openat_pathref_fsp()
-			 * can't recurse into fake_acls_stat().
-			 * openat_pathref_fsp() doesn't care
-			 * about the uid/gid values, it only
-			 * wants a valid/invalid stat answer
-			 * and we know smb_fname exists as
-			 * the SMB_VFS_NEXT_STAT() returned
-			 * zero above.
+			 * This is a stream pathname. Use
+			 * the base_fsp to get the xattr.
 			 */
-			if (prd->calling_pathref_fsp) {
-				return 0;
-			}
+			fsp = fsp->base_fsp;
+		}
+	} else {
+		NTSTATUS status;
 
-			/*
-			 * openat_pathref_fsp() expects a talloc'ed
-			 * smb_filename. stat can be passed a struct
-			 * from the stack. Make a talloc'ed copy
-			 * so openat_pathref_fsp() can add its
-			 * destructor.
-			 */
-			smb_fname_cp = cp_smb_filename(talloc_tos(),
-						       smb_fname);
-			if (smb_fname_cp == NULL) {
-				errno = ENOMEM;
-				return -1;
-			}
-
-			/* Recursion guard. */
-			prd->calling_pathref_fsp = true;
-			status = openat_pathref_fsp(handle->conn->cwd_fsp,
-						    smb_fname_cp);
-			/* End recursion guard. */
-			prd->calling_pathref_fsp = false;
-
-			if (!NT_STATUS_IS_OK(status)) {
-				/*
-				 * Ignore errors here. We know
-				 * the path exists (the SMB_VFS_NEXT_STAT()
-				 * above succeeded. So being unable to
-				 * open a pathref fsp can be due to a
-				 * range of errors (startup path beginning
-				 * with '/' for example, path = ".." when
-				 * enumerating a directory. Just treat this
-				 * the same way as the path not having the
-				 * FAKE_UID or FAKE_GID EA's present. For the
-				 * test purposes of this module (fake NT ACLs
-				 * from windows clients) this is close enough.
-				 * Just report for debugging purposes.
-				 */
-				DBG_DEBUG("Unable to get pathref fsp on %s. "
-					  "Error %s\n",
-					  smb_fname_str_dbg(smb_fname_cp),
-					  nt_errstr(status));
-				TALLOC_FREE(smb_fname_cp);
-				return 0;
-			}
-			fsp = smb_fname_cp->fsp;
+		/*
+		 * Ensure openat_pathref_fsp()
+		 * can't recurse into fake_acls_stat().
+		 * openat_pathref_fsp() doesn't care
+		 * about the uid/gid values, it only
+		 * wants a valid/invalid stat answer
+		 * and we know smb_fname exists as
+		 * the SMB_VFS_NEXT_STAT() returned
+		 * zero above.
+		 */
+		if (prd->calling_pathref_fsp) {
+			return 0;
 		}
 
-		ret = fake_acls_fuid(handle,
-				     fsp,
-				     &smb_fname->st.st_ex_uid);
-		if (ret != 0) {
-			TALLOC_FREE(smb_fname_cp);
-			return ret;
+		/*
+		 * openat_pathref_fsp() expects a talloc'ed
+		 * smb_filename. stat can be passed a struct
+		 * from the stack. Make a talloc'ed copy
+		 * so openat_pathref_fsp() can add its
+		 * destructor.
+		 */
+		smb_fname_cp = cp_smb_filename(talloc_tos(),
+					       smb_fname);
+		if (smb_fname_cp == NULL) {
+			errno = ENOMEM;
+			return -1;
 		}
-		ret = fake_acls_fgid(handle,
-				     fsp,
-				     &smb_fname->st.st_ex_gid);
-		if (ret != 0) {
+
+		/* Recursion guard. */
+		prd->calling_pathref_fsp = true;
+		status = openat_pathref_fsp(handle->conn->cwd_fsp,
+					    smb_fname_cp);
+		/* End recursion guard. */
+		prd->calling_pathref_fsp = false;
+
+		if (!NT_STATUS_IS_OK(status)) {
+			/*
+			 * Ignore errors here. We know
+			 * the path exists (the SMB_VFS_NEXT_STAT()
+			 * above succeeded. So being unable to
+			 * open a pathref fsp can be due to a
+			 * range of errors (startup path beginning
+			 * with '/' for example, path = ".." when
+			 * enumerating a directory. Just treat this
+			 * the same way as the path not having the
+			 * FAKE_UID or FAKE_GID EA's present. For the
+			 * test purposes of this module (fake NT ACLs
+			 * from windows clients) this is close enough.
+			 * Just report for debugging purposes.
+			 */
+			DBG_DEBUG("Unable to get pathref fsp on %s. "
+				  "Error %s\n",
+				  smb_fname_str_dbg(smb_fname_cp),
+				  nt_errstr(status));
 			TALLOC_FREE(smb_fname_cp);
-			return ret;
+			return 0;
 		}
-		TALLOC_FREE(smb_fname_cp);
+		fsp = smb_fname_cp->fsp;
 	}
 
+	ret = fake_acls_fuid(handle,
+			     fsp,
+			     &smb_fname->st.st_ex_uid);
+	if (ret != 0) {
+		TALLOC_FREE(smb_fname_cp);
+		return ret;
+	}
+	ret = fake_acls_fgid(handle,
+			     fsp,
+			     &smb_fname->st.st_ex_gid);
+	if (ret != 0) {
+		TALLOC_FREE(smb_fname_cp);
+		return ret;
+	}
+	TALLOC_FREE(smb_fname_cp);
 	return ret;
 }
 
diff --git a/source3/rpc_server/mdssvc/mdssvc_es.c b/source3/rpc_server/mdssvc/mdssvc_es.c
index aa169a80e1f..7eba87abf53 100644
--- a/source3/rpc_server/mdssvc/mdssvc_es.c
+++ b/source3/rpc_server/mdssvc/mdssvc_es.c
@@ -679,7 +679,7 @@ static void mds_es_search_http_read_done(struct tevent_req *subreq)
 	json_t *match = NULL;
 	size_t i;
 	json_error_t error;
-	int hits;
+	size_t hits;
 	NTSTATUS status;
 	int ret;
 	bool ok;
@@ -770,7 +770,7 @@ static void mds_es_search_http_read_done(struct tevent_req *subreq)
 		DBG_ERR("Hu?! No results?\n");
 		goto fail;
 	}
-	DBG_DEBUG("Hits: %d\n", hits);
+	DBG_DEBUG("Hits: %zu\n", hits);
 
 	for (i = 0; i < hits; i++) {
 		const char *path = NULL;
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 0427b0cef9d..6acc38c80f6 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -1227,25 +1227,25 @@ static NTSTATUS reopen_from_fsp(struct files_struct *fsp,
 	status = reopen_from_procfd(fsp,
 				    flags,
 				    mode);
-	if (NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
-		/*
-		 * Close the existing pathref fd and set the fsp flag
-		 * is_pathref to false so we get a "normal" fd this
-		 * time.
-		 */
-		status = fd_close(fsp);
-		if (!NT_STATUS_IS_OK(status)) {
-			return status;
-		}
-
-		fsp->fsp_flags.is_pathref = false;
+	if (!NT_STATUS_EQUAL(status, NT_STATUS_MORE_PROCESSING_REQUIRED)) {
+		return status;
+	}
 
-		status = fd_open_atomic(fsp,
-					flags,
-					mode,
-					p_file_created);
+	/*
+	 * Close the existing pathref fd and set the fsp flag
+	 * is_pathref to false so we get a "normal" fd this time.
+	 */
+	status = fd_close(fsp);
+	if (!NT_STATUS_IS_OK(status)) {
+		return status;
 	}
 
+	fsp->fsp_flags.is_pathref = false;
+
+	status = fd_open_atomic(fsp,
+				flags,
+				mode,
+				p_file_created);
 	return status;
 }
 
diff --git a/source3/smbd/posix_acls.c b/source3/smbd/posix_acls.c
index 899e7dc3c1e..ba9a61f2db6 100644
--- a/source3/smbd/posix_acls.c
+++ b/source3/smbd/posix_acls.c
@@ -3885,7 +3885,7 @@ int get_acl_group_bits( connection_struct *conn,
  and set the mask to rwx. Needed to preserve complex ACLs set by NT.
 ****************************************************************************/
 
-static int chmod_acl_internals( connection_struct *conn, SMB_ACL_T posix_acl, mode_t mode)
+static int chmod_acl_internals(SMB_ACL_T posix_acl, mode_t mode)
 {
 	int entry_id = SMB_ACL_FIRST_ENTRY;
 	SMB_ACL_ENTRY_T entry;
@@ -3953,24 +3953,25 @@ static int chmod_acl_internals( connection_struct *conn, SMB_ACL_T posix_acl, mo
  resulting ACL on TO.  Note that name is in UNIX character set.
 ****************************************************************************/
 
-static int copy_access_posix_acl(connection_struct *conn,
-				const struct smb_filename *smb_fname_from,
-				const struct smb_filename *smb_fname_to,
-				mode_t mode)
+static int copy_access_posix_acl(struct files_struct *from,
+				 struct files_struct *to,
+				 mode_t mode)
 {
 	SMB_ACL_T posix_acl = NULL;
 	int ret = -1;
 
-	if ((posix_acl = SMB_VFS_SYS_ACL_GET_FD(smb_fname_from->fsp,
-						  SMB_ACL_TYPE_ACCESS,
-						  talloc_tos())) == NULL)
+	posix_acl = SMB_VFS_SYS_ACL_GET_FD(
+		from, SMB_ACL_TYPE_ACCESS, talloc_tos());
+	if (from == NULL) {
 		return -1;
+	}
 
-	if ((ret = chmod_acl_internals(conn, posix_acl, mode)) == -1)
+	ret = chmod_acl_internals(posix_acl, mode);
+	if (ret == -1) {
 		goto done;
+	}
 
-	ret = SMB_VFS_SYS_ACL_SET_FD(smb_fname_to->fsp,
-			SMB_ACL_TYPE_ACCESS, posix_acl);
+	ret = SMB_VFS_SYS_ACL_SET_FD(to, SMB_ACL_TYPE_ACCESS, posix_acl);
 
  done:
 
@@ -3982,12 +3983,10 @@ static int copy_access_posix_acl(connection_struct *conn,
  Check for an existing default POSIX ACL on a directory.
 ****************************************************************************/
 
-static bool directory_has_default_posix_acl(connection_struct *conn,
-			const struct smb_filename *smb_fname)
+static bool directory_has_default_posix_acl(struct files_struct *dirfsp)
 {
-	SMB_ACL_T def_acl = SMB_VFS_SYS_ACL_GET_FD(smb_fname->fsp,
-						     SMB_ACL_TYPE_DEFAULT,
-						     talloc_tos());
+	SMB_ACL_T def_acl = SMB_VFS_SYS_ACL_GET_FD(
+		dirfsp, SMB_ACL_TYPE_DEFAULT, talloc_tos());
 	bool has_acl = False;
 	SMB_ACL_ENTRY_T entry;
 
@@ -4011,10 +4010,14 @@ int inherit_access_posix_acl(connection_struct *conn,
 			const struct smb_filename *smb_fname,
 			mode_t mode)
 {
-	if (directory_has_default_posix_acl(conn, inherit_from_dir))
+	int ret;
+
+	if (directory_has_default_posix_acl(inherit_from_dir->fsp))
 		return 0;
 
-	return copy_access_posix_acl(conn, inherit_from_dir, smb_fname, mode);
+	ret = copy_access_posix_acl(
+		inherit_from_dir->fsp, smb_fname->fsp, mode);
+	return ret;
 }
 
 /****************************************************************************
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 042f343b0ca..caf6b6add1d 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -2976,9 +2976,9 @@ NTSTATUS smbd_smb2_request_dispatch(struct smbd_smb2_request *req)
 	flags = IVAL(inhdr, SMB2_HDR_FLAGS);
 	opcode = SVAL(inhdr, SMB2_HDR_OPCODE);
 	mid = BVAL(inhdr, SMB2_HDR_MESSAGE_ID);
-	DEBUG(10,("smbd_smb2_request_dispatch: opcode[%s] mid = %llu\n",
-		smb2_opcode_name(opcode),
-		(unsigned long long)mid));
+	DBG_DEBUG("opcode[%s] mid = %"PRIu64"\n",
+		  smb2_opcode_name(opcode),
+		  mid);
 
 	if (xconn->protocol >= PROTOCOL_SMB2_02) {
 		/*
diff --git a/source4/torture/smb2/create.c b/source4/torture/smb2/create.c
index 41a6ed6e4e4..4327fea9cc7 100644
--- a/source4/torture/smb2/create.c
+++ b/source4/torture/smb2/create.c
@@ -709,7 +709,7 @@ static bool test_smb2_open(struct torture_context *tctx,
 	struct smb2_handle h = {{0}};
 	struct smb2_handle h1 = {{0}};
 	bool ret = true;
-	int i;
+	size_t i;
 	struct {
 		uint32_t create_disp;
 		bool with_file;
@@ -760,7 +760,7 @@ static bool test_smb2_open(struct torture_context *tctx,
 			status= smb2_create(tree, tctx, &(io.smb2));
 			if (!NT_STATUS_IS_OK(status)) {
 				torture_comment(tctx,
-				    "Failed to create file %s status %s %d\n",
+				    "Failed to create file %s status %s %zu\n",
 				    fname, nt_errstr(status), i);
 
 				ret = false;
@@ -772,7 +772,7 @@ static bool test_smb2_open(struct torture_context *tctx,
 		status = smb2_create(tree, tctx, &(io.smb2));
 		if (!NT_STATUS_EQUAL(status, open_funcs[i].correct_status)) {
 			torture_comment(tctx,
-			    "(%s) incorrect status %s should be %s (i=%d "
+			    "(%s) incorrect status %s should be %s (i=%zu "
 			    "with_file=%d open_disp=%d)\n",
 			 __location__, nt_errstr(status),
 			nt_errstr(open_funcs[i].correct_status),


-- 
Samba Shared Repository



More information about the samba-cvs mailing list