[SCM] Samba Shared Repository - branch v4-22-test updated

Jule Anger janger at samba.org
Mon Mar 31 12:14:01 UTC 2025


The branch, v4-22-test has been updated
       via  d731cc875f2 vfs: Fix Bug 15791, vfs_acl_tdb unlinkat()
       via  34a2e467259 vfs: Fix a lock order violation in unlinkat_acl_tdb()
      from  a2f2a714848 smbd: fix handling of directory leases and oplock levels

https://git.samba.org/?p=samba.git;a=shortlog;h=v4-22-test


- Log -----------------------------------------------------------------
commit d731cc875f2f14b9410141f983d993069bcd8f18
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jan 28 14:03:49 2025 +0100

    vfs: Fix Bug 15791, vfs_acl_tdb unlinkat()
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=15791
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    (cherry picked from commit 93a6d36239dd2ce2b3863945f8b9b59cb6aa911a)
    
    Autobuild-User(v4-22-test): Jule Anger <janger at samba.org>
    Autobuild-Date(v4-22-test): Mon Mar 31 12:13:03 UTC 2025 on atb-devel-224

commit 34a2e467259cad93b12caaf2b7a4dbfa68f68929
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Feb 26 16:04:01 2025 +0100

    vfs: Fix a lock order violation in unlinkat_acl_tdb()
    
    unlinkat is called when the share mode record is locked.
    
    Bug: https://bugzilla.samba.org/show_bug.cgi?id=15791
    Signed-off-by: Volker Lendecke <vl at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    (cherry picked from commit 93bc238aa91ec8041648d17e11bf235132974eda)

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

Summary of changes:
 source3/modules/vfs_acl_tdb.c | 51 ++++++++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 23 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_acl_tdb.c b/source3/modules/vfs_acl_tdb.c
index f2d2692159f..b054f159f87 100644
--- a/source3/modules/vfs_acl_tdb.c
+++ b/source3/modules/vfs_acl_tdb.c
@@ -58,7 +58,7 @@ static bool acl_tdb_init(void)
 
 	become_root();
 	acl_db = db_open(NULL, dbname, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600,
-			 DBWRAP_LOCK_ORDER_1, DBWRAP_FLAG_NONE);
+			 DBWRAP_LOCK_ORDER_2, DBWRAP_FLAG_NONE);
 	unbecome_root();
 
 	if (acl_db == NULL) {
@@ -195,38 +195,43 @@ static int unlinkat_acl_tdb(vfs_handle_struct *handle,
 			const struct smb_filename *smb_fname,
 			int flags)
 {
-	struct smb_filename *smb_fname_tmp = NULL;
-	struct db_context *db = acl_db;
-	int ret = -1;
-
-	smb_fname_tmp = cp_smb_filename_nostream(talloc_tos(), smb_fname);
-	if (smb_fname_tmp == NULL) {
-		errno = ENOMEM;
-		goto out;
-	}
+	struct stat_ex st = {};
+	int ret;
 
-	ret = vfs_stat(handle->conn, smb_fname_tmp);
-	if (ret == -1) {
-		goto out;
+	if (!is_named_stream(smb_fname)) {
+		if (VALID_STAT(smb_fname->st)) {
+			st = smb_fname->st;
+		} else {
+			ret = SMB_VFS_NEXT_FSTATAT(handle,
+						   dirfsp,
+						   smb_fname,
+						   &st,
+						   AT_SYMLINK_NOFOLLOW);
+			if (ret == -1) {
+				return ret;
+			}
+		}
 	}
 
 	if (flags & AT_REMOVEDIR) {
-		ret = rmdir_acl_common(handle,
-				dirfsp,
-				smb_fname_tmp);
+		ret = rmdir_acl_common(handle, dirfsp, smb_fname);
 	} else {
-		ret = unlink_acl_common(handle,
-				dirfsp,
-				smb_fname_tmp,
-				flags);
+		ret = unlink_acl_common(handle, dirfsp, smb_fname, flags);
 	}
 
 	if (ret == -1) {
-		goto out;
+		return -1;
 	}
 
-	acl_tdb_delete(handle, db, &smb_fname_tmp->st);
- out:
+	if (is_named_stream(smb_fname)) {
+		/*
+		 * ACLs only stored for basenames
+		 */
+		return ret;
+	}
+
+	acl_tdb_delete(handle, acl_db, &st);
+
 	return ret;
 }
 


-- 
Samba Shared Repository



More information about the samba-cvs mailing list