[SCM] Samba Shared Repository - branch master updated

Noel Power npower at samba.org
Mon Mar 22 19:45:02 UTC 2021


The branch, master has been updated
       via  d6a16ad00e4 s3:modules:vfs_virusfilter: Recent New_VFS changes break vfs_virusfilter_openat.
       via  4af98681425 s3: VFS: default: vfswrap_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
       via  8f38f886ffa s3: VFS: time_audit: Log full pathname as smb_time_audit_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
       via  49bcb913398 s3: VFS: full_audit: Log full pathname as smb_full_audit_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
       via  ea5c15358f1 s3: VFS: gluster: vfs_gluster_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
       via  c344ade7178 s3: VFS: ceph: cephwrap_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
      from  ec4794b5d9e s3:param: Fix segfault trying to add pcap printer without a [printers] share

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


- Log -----------------------------------------------------------------
commit d6a16ad00e426a6f815215af71c071dd8e85a50a
Author: Trever L. Adams <trever.adams at gmail.com>
Date:   Sat Mar 13 12:47:21 2021 -0700

    s3:modules:vfs_virusfilter: Recent New_VFS changes break vfs_virusfilter_openat.
    
    The_New_VFS introduces several changes that broke vfs_virusfilter_openat. The assert to make sure certain checks would work broke.
    
    This patch fixes those breaks and converts to the SMB_VFS_FSTAT_NEXT instead of SMB_VFS_STAT_NEXT.
    
    BUG: https://bugzilla.samba.org/show_bug.cgi?id=14671
    RN: vfs_virusfilter_openat support New_VFS FSTAT, avoid SMB_ASSERT(fsp_get_pathref_fd(dirfsp) == AT_FDCWD); problem.
    
    Signed-off-by: Trever L. Adams" <trever.adams at gmail.com>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>
    
    Autobuild-User(master): Noel Power <npower at samba.org>
    Autobuild-Date(master): Mon Mar 22 19:44:30 UTC 2021 on sn-devel-184

commit 4af9868142529187a87b30cd522a144ead76cc8c
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Mar 16 18:26:43 2021 -0700

    s3: VFS: default: vfswrap_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power<npower at samba.org>

commit 8f38f886ffa0845626de4d94e45685376f790d46
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Mar 16 21:50:08 2021 -0700

    s3: VFS: time_audit: Log full pathname as smb_time_audit_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power<npower at samba.org>

commit 49bcb913398492f08a3d6d9b1ac36ff0563f71d7
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Mar 16 21:49:14 2021 -0700

    s3: VFS: full_audit: Log full pathname as smb_full_audit_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power<npower at samba.org>

commit ea5c15358f12a6cd584b52039411e0feb526f380
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Mar 16 21:48:42 2021 -0700

    s3: VFS: gluster: vfs_gluster_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power <npower at samba.org>

commit c344ade717853b2622602d2f1fa38d073ffc2810
Author: Jeremy Allison <jra at samba.org>
Date:   Tue Mar 16 21:48:07 2021 -0700

    s3: VFS: ceph: cephwrap_create_dfs_pathat() isn't restricted to dirfsp->conn->cwd_fsp anymore.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Noel Power<npower at samba.org>

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

Summary of changes:
 source3/modules/vfs_ceph.c        | 12 +++++++++---
 source3/modules/vfs_default.c     |  4 +---
 source3/modules/vfs_full_audit.c  | 11 ++++++++++-
 source3/modules/vfs_glusterfs.c   | 10 ++++++++--
 source3/modules/vfs_time_audit.c  | 14 ++++++++++++--
 source3/modules/vfs_virusfilter.c |  8 ++------
 6 files changed, 42 insertions(+), 17 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c
index e2f3691bc4f..e371090c95d 100644
--- a/source3/modules/vfs_ceph.c
+++ b/source3/modules/vfs_ceph.c
@@ -1379,8 +1379,14 @@ static NTSTATUS cephwrap_create_dfs_pathat(struct vfs_handle_struct *handle,
 	NTSTATUS status = NT_STATUS_NO_MEMORY;
 	int ret;
 	char *msdfs_link = NULL;
+	struct smb_filename *full_fname = NULL;
 
-	SMB_ASSERT(dirfsp == dirfsp->conn->cwd_fsp);
+	full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+						dirfsp,
+						smb_fname);
+	if (full_fname == NULL) {
+		goto out;
+	}
 
 	/* Form the msdfs_link contents */
 	msdfs_link = msdfs_link_string(frame,
@@ -1392,7 +1398,7 @@ static NTSTATUS cephwrap_create_dfs_pathat(struct vfs_handle_struct *handle,
 
 	ret = ceph_symlink(handle->data,
 			msdfs_link,
-			smb_fname->base_name);
+			full_fname->base_name);
 	if (ret == 0) {
 		status = NT_STATUS_OK;
 	} else {
@@ -1402,7 +1408,7 @@ static NTSTATUS cephwrap_create_dfs_pathat(struct vfs_handle_struct *handle,
   out:
 
 	DBG_DEBUG("[CEPH] create_dfs_pathat(%s) = %s\n",
-			smb_fname->base_name,
+			full_fname->base_name,
 			nt_errstr(status));
 
 	TALLOC_FREE(frame);
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index e48deb022a7..9a2c13d743b 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -386,8 +386,6 @@ static NTSTATUS vfswrap_create_dfs_pathat(struct vfs_handle_struct *handle,
 	int ret;
 	char *msdfs_link = NULL;
 
-	SMB_ASSERT(dirfsp == dirfsp->conn->cwd_fsp);
-
 	/* Form the msdfs_link contents */
 	msdfs_link = msdfs_link_string(frame,
 					reflist,
@@ -397,7 +395,7 @@ static NTSTATUS vfswrap_create_dfs_pathat(struct vfs_handle_struct *handle,
 	}
 
 	ret = symlinkat(msdfs_link,
-			fsp_get_io_fd(dirfsp),
+			fsp_get_pathref_fd(dirfsp),
 			smb_fname->base_name);
 	if (ret == 0) {
 		status = NT_STATUS_OK;
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index e89307ce6a1..ee26c6a5bfa 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -895,6 +895,14 @@ static NTSTATUS smb_full_audit_create_dfs_pathat(struct vfs_handle_struct *handl
 				size_t referral_count)
 {
 	NTSTATUS status;
+	struct smb_filename *full_fname = NULL;
+
+	full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+						  dirfsp,
+						  smb_fname);
+	if (full_fname == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	status = SMB_VFS_NEXT_CREATE_DFS_PATHAT(handle,
 			dirfsp,
@@ -906,8 +914,9 @@ static NTSTATUS smb_full_audit_create_dfs_pathat(struct vfs_handle_struct *handl
 		NT_STATUS_IS_OK(status),
 		handle,
 		"%s",
-		smb_fname_str_do_log(handle->conn, smb_fname));
+		smb_fname_str_do_log(handle->conn, full_fname));
 
+	TALLOC_FREE(full_fname);
 	return status;
 }
 
diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c
index 38c8a48c378..cb83e012424 100644
--- a/source3/modules/vfs_glusterfs.c
+++ b/source3/modules/vfs_glusterfs.c
@@ -2130,8 +2130,14 @@ static NTSTATUS vfs_gluster_create_dfs_pathat(struct vfs_handle_struct *handle,
 	NTSTATUS status = NT_STATUS_NO_MEMORY;
 	int ret;
 	char *msdfs_link = NULL;
+	struct smb_filename *full_fname = NULL;
 
-	SMB_ASSERT(dirfsp == dirfsp->conn->cwd_fsp);
+	full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+						  dirfsp,
+						  smb_fname);
+	if (full_fname == NULL) {
+		goto out;
+	}
 
 	/* Form the msdfs_link contents */
 	msdfs_link = msdfs_link_string(frame,
@@ -2143,7 +2149,7 @@ static NTSTATUS vfs_gluster_create_dfs_pathat(struct vfs_handle_struct *handle,
 
 	ret = glfs_symlink(handle->data,
 			msdfs_link,
-			smb_fname->base_name);
+			full_fname->base_name);
 	if (ret == 0) {
 		status = NT_STATUS_OK;
 	} else {
diff --git a/source3/modules/vfs_time_audit.c b/source3/modules/vfs_time_audit.c
index 4c7f65020b1..175da80ff84 100644
--- a/source3/modules/vfs_time_audit.c
+++ b/source3/modules/vfs_time_audit.c
@@ -332,6 +332,14 @@ static NTSTATUS smb_time_audit_create_dfs_pathat(struct vfs_handle_struct *handl
 	NTSTATUS result;
 	struct timespec ts1,ts2;
 	double timediff;
+	struct smb_filename *full_fname = NULL;
+
+	full_fname = full_path_from_dirfsp_atname(talloc_tos(),
+						  dirfsp,
+						  smb_fname);
+	if (full_fname == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
 
 	clock_gettime_mono(&ts1);
 	result = SMB_VFS_NEXT_CREATE_DFS_PATHAT(handle,
@@ -343,9 +351,11 @@ static NTSTATUS smb_time_audit_create_dfs_pathat(struct vfs_handle_struct *handl
 	timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
 
 	if (timediff > audit_timeout) {
-		smb_time_audit_log("get_dfs_referrals", timediff);
+		smb_time_audit_log_smb_fname("create_dfs_pathat",
+			timediff,
+			full_fname);
 	}
-
+	TALLOC_FREE(full_fname);
 	return result;
 }
 
diff --git a/source3/modules/vfs_virusfilter.c b/source3/modules/vfs_virusfilter.c
index e7017ee1c7a..25ef4b32490 100644
--- a/source3/modules/vfs_virusfilter.c
+++ b/source3/modules/vfs_virusfilter.c
@@ -1243,11 +1243,7 @@ static int virusfilter_vfs_openat(struct vfs_handle_struct *handle,
 	bool ok1;
 	char *sret = NULL;
 	struct smb_filename *smb_fname = NULL;
-
-	/*
-	 * For now assert this, so SMB_VFS_NEXT_STAT() below works.
-	 */
-	SMB_ASSERT(fsp_get_pathref_fd(dirfsp) == AT_FDCWD);
+	SMB_STRUCT_STAT sbuf = smb_fname_in->st;
 
 	SMB_VFS_HANDLE_GET_DATA(handle, config,
 				struct virusfilter_config, return -1);
@@ -1289,7 +1285,7 @@ static int virusfilter_vfs_openat(struct vfs_handle_struct *handle,
 		goto virusfilter_vfs_open_next;
 	}
 
-	ret = SMB_VFS_NEXT_STAT(handle, smb_fname);
+	ret = SMB_VFS_NEXT_FSTAT(handle, fsp, &sbuf);
 	if (ret != 0) {
 
 		/*


-- 
Samba Shared Repository



More information about the samba-cvs mailing list