[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Tue Feb 16 22:27:05 UTC 2016


The branch, master has been updated
       via  a077e2a FIXUP: s3: VFS: Modify SMB_VFS_GET_NT_ACL to take a const struct smb_filename *
       via  616d068 s3: VFS: Modify SMB_VFS_GET_NT_ACL to take a const struct smb_filename * instead of const char *
      from  3330c79 tdb: eliminate deprecation warnings in python tests

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


- Log -----------------------------------------------------------------
commit a077e2ae62fea085f392cc32f1eb48942f5d43c7
Author: Ralph Boehme <slow at samba.org>
Date:   Sun Feb 14 21:36:15 2016 +0100

    FIXUP: s3: VFS: Modify SMB_VFS_GET_NT_ACL to take a const struct smb_filename *
    
    Signed-off-by: Ralph Boehme <slow 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 16 23:26:48 CET 2016 on sn-devel-144

commit 616d068f0cebb8e50a855b6e30f36fccb7f5a3c8
Author: Jeremy Allison <jra at samba.org>
Date:   Fri Feb 12 10:30:10 2016 -0800

    s3: VFS: Modify SMB_VFS_GET_NT_ACL to take a const struct smb_filename * instead of const char *
    
    Bumps VFS version to 35.
    
    Preparing to reduce use of lp_posix_pathnames().
    
    Most of this is boilerplate, the only subtleties are in
    the modules:
    
    vfs_catia.c
    vfs_media_harmony.c
    vfs_shadow_copy2.c
    vfs_unityed_media.c
    
    Where the path is modified then passed to SMB_VFS_NEXT_GET_NT_ACL().
    In these cases the change uses synthetic_smb_fname() to
    create a new struct smb_filename from the modified path.
    
    Signed-off-by: Jeremy Allison <jra at samba.org>
    Reviewed-by: Ralph Boehme <rb at sernet.de>

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

Summary of changes:
 examples/VFS/skel_opaque.c          |  3 ++-
 examples/VFS/skel_transparent.c     | 10 +++++++---
 source3/include/vfs.h               |  9 ++++++---
 source3/include/vfs_macros.h        |  8 ++++----
 source3/modules/vfs_acl_common.c    | 21 ++++++++++++++-------
 source3/modules/vfs_catia.c         | 16 ++++++++++++++--
 source3/modules/vfs_default.c       |  9 ++++++---
 source3/modules/vfs_full_audit.c    |  6 +++---
 source3/modules/vfs_media_harmony.c | 21 ++++++++++++++++-----
 source3/modules/vfs_nfs4acl_xattr.c |  4 +++-
 source3/modules/vfs_shadow_copy2.c  | 36 ++++++++++++++++++++++++++++++------
 source3/modules/vfs_snapper.c       | 33 +++++++++++++++++++++++++++------
 source3/modules/vfs_time_audit.c    |  8 +++++---
 source3/modules/vfs_unityed_media.c | 21 ++++++++++++++++-----
 source3/smbd/dir.c                  |  2 +-
 source3/smbd/file_access.c          | 12 +++++++++++-
 source3/smbd/open.c                 | 27 +++++++++++++++++++++++----
 source3/smbd/posix_acls.c           | 15 ++++++++++++++-
 source3/smbd/pysmbd.c               | 18 ++++++++++++++++--
 source3/smbd/vfs.c                  |  8 ++++++--
 source3/torture/cmd_vfs.c           | 12 +++++++++++-
 21 files changed, 235 insertions(+), 64 deletions(-)


Changeset truncated at 500 lines:

diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c
index a4309d4..0d5571c 100644
--- a/examples/VFS/skel_opaque.c
+++ b/examples/VFS/skel_opaque.c
@@ -667,7 +667,8 @@ static NTSTATUS skel_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 }
 
 static NTSTATUS skel_get_nt_acl(vfs_handle_struct *handle,
-				const char *name, uint32_t security_info,
+				const struct smb_filename *smb_fname,
+				uint32_t security_info,
 				TALLOC_CTX *mem_ctx,
 				struct security_descriptor **ppdesc)
 {
diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c
index 2d1ed79..fc3c818 100644
--- a/examples/VFS/skel_transparent.c
+++ b/examples/VFS/skel_transparent.c
@@ -794,12 +794,16 @@ static NTSTATUS skel_fget_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
 }
 
 static NTSTATUS skel_get_nt_acl(vfs_handle_struct *handle,
-				const char *name, uint32_t security_info,
+				const struct smb_filename *smb_fname,
+				uint32_t security_info,
 				TALLOC_CTX *mem_ctx,
 				struct security_descriptor **ppdesc)
 {
-	return SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, mem_ctx,
-				       ppdesc);
+	return SMB_VFS_NEXT_GET_NT_ACL(handle,
+				smb_fname,
+				security_info,
+				mem_ctx,
+				ppdesc);
 }
 
 static NTSTATUS skel_fset_nt_acl(vfs_handle_struct *handle, files_struct *fsp,
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index c18ea59..d416a5b 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -170,8 +170,11 @@
 /* Bump to version 34 - Samba 4.4 will ship with that */
 /* Version 34 - Remove bool posix_open, add uint64_t posix_flags */
 /* Version 34 - Added bool posix_pathnames to struct smb_request */
+/* Bump to version 35 - Samba 4.5 will ship with that */
+/* Version 35 - Change get_nt_acl_fn from const char *, to
+		const struct smb_filename * */
 
-#define SMB_VFS_INTERFACE_VERSION 34
+#define SMB_VFS_INTERFACE_VERSION 35
 
 /*
     All intercepted VFS operations must be declared as static functions inside module source
@@ -745,7 +748,7 @@ struct vfs_fn_pointers {
 				   TALLOC_CTX *mem_ctx,
 				   struct security_descriptor **ppdesc);
 	NTSTATUS (*get_nt_acl_fn)(struct vfs_handle_struct *handle,
-				  const char *name,
+				  const struct smb_filename *smb_fname,
 				  uint32_t security_info,
 				   TALLOC_CTX *mem_ctx,
 				  struct security_descriptor **ppdesc);
@@ -1188,7 +1191,7 @@ NTSTATUS smb_vfs_call_fget_nt_acl(struct vfs_handle_struct *handle,
 				  TALLOC_CTX *mem_ctx,
 				  struct security_descriptor **ppdesc);
 NTSTATUS smb_vfs_call_get_nt_acl(struct vfs_handle_struct *handle,
-				 const char *name,
+				 const struct smb_filename *smb_fname,
 				 uint32_t security_info,
 				 TALLOC_CTX *mem_ctx,
 				 struct security_descriptor **ppdesc);
diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h
index 16d5bfd..cef3849 100644
--- a/source3/include/vfs_macros.h
+++ b/source3/include/vfs_macros.h
@@ -437,10 +437,10 @@
 #define SMB_VFS_NEXT_FGET_NT_ACL(handle, fsp, security_info, mem_ctx, ppdesc) \
 	smb_vfs_call_fget_nt_acl((handle)->next, (fsp), (security_info), (mem_ctx), (ppdesc))
 
-#define SMB_VFS_GET_NT_ACL(conn, name, security_info, mem_ctx, ppdesc)	\
-	smb_vfs_call_get_nt_acl((conn)->vfs_handles, (name), (security_info), (mem_ctx), (ppdesc))
-#define SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info, mem_ctx, ppdesc) \
-	smb_vfs_call_get_nt_acl((handle)->next, (name), (security_info), (mem_ctx), (ppdesc))
+#define SMB_VFS_GET_NT_ACL(conn, smb_fname, security_info, mem_ctx, ppdesc)	\
+	smb_vfs_call_get_nt_acl((conn)->vfs_handles, (smb_fname), (security_info), (mem_ctx), (ppdesc))
+#define SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname, security_info, mem_ctx, ppdesc) \
+	smb_vfs_call_get_nt_acl((handle)->next, (smb_fname), (security_info), (mem_ctx), (ppdesc))
 
 #define SMB_VFS_AUDIT_FILE(conn, name, sacl, access_requested, access_denied) \
 	smb_vfs_call_audit_file((conn)->vfs_handles, (name), (sacl), (access_requested), (access_denied))
diff --git a/source3/modules/vfs_acl_common.c b/source3/modules/vfs_acl_common.c
index f73e80c..30574e0 100644
--- a/source3/modules/vfs_acl_common.c
+++ b/source3/modules/vfs_acl_common.c
@@ -366,7 +366,7 @@ static NTSTATUS add_directory_inheritable_components(vfs_handle_struct *handle,
 
 static NTSTATUS get_nt_acl_internal(vfs_handle_struct *handle,
 				    files_struct *fsp,
-				    const char *name,
+				    const struct smb_filename *smb_fname,
 				    uint32_t security_info,
 				    TALLOC_CTX *mem_ctx,
 				    struct security_descriptor **ppdesc)
@@ -381,14 +381,17 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct *handle,
 	uint8_t sys_acl_hash_tmp[XATTR_SD_HASH_SIZE];
 	struct security_descriptor *psd = NULL;
 	struct security_descriptor *pdesc_next = NULL;
+	const char *name = NULL;
 	bool ignore_file_system_acl = lp_parm_bool(SNUM(handle->conn),
 						ACL_MODULE_NAME,
 						"ignore system acls",
 						false);
 	TALLOC_CTX *frame = talloc_stackframe();
 
-	if (fsp && name == NULL) {
+	if (fsp && smb_fname == NULL) {
 		name = fsp->fsp_name->base_name;
+	} else {
+		name = smb_fname->base_name;
 	}
 
 	DEBUG(10, ("get_nt_acl_internal: name=%s\n", name));
@@ -509,7 +512,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct *handle,
 							  &pdesc_next);
 		} else {
 			status = SMB_VFS_NEXT_GET_NT_ACL(handle,
-							 name,
+							 smb_fname,
 							 HASH_SECURITY_INFO,
 							 mem_ctx,
 							 &pdesc_next);
@@ -575,7 +578,7 @@ static NTSTATUS get_nt_acl_internal(vfs_handle_struct *handle,
 							  &pdesc_next);
 		} else {
 			status = SMB_VFS_NEXT_GET_NT_ACL(handle,
-							 name,
+							 smb_fname,
 							 security_info,
 							 mem_ctx,
 							 &pdesc_next);
@@ -728,13 +731,17 @@ static NTSTATUS fget_nt_acl_common(vfs_handle_struct *handle,
 *********************************************************************/
 
 static NTSTATUS get_nt_acl_common(vfs_handle_struct *handle,
-				  const char *name,
+				  const struct smb_filename *smb_fname,
 				  uint32_t security_info,
 				  TALLOC_CTX *mem_ctx,
 				  struct security_descriptor **ppdesc)
 {
-	return get_nt_acl_internal(handle, NULL,
-				   name, security_info, mem_ctx, ppdesc);
+	return get_nt_acl_internal(handle,
+				NULL,
+				smb_fname,
+				security_info,
+				mem_ctx,
+				ppdesc);
 }
 
 /*********************************************************************
diff --git a/source3/modules/vfs_catia.c b/source3/modules/vfs_catia.c
index c17ffa8..48e2e3f 100644
--- a/source3/modules/vfs_catia.c
+++ b/source3/modules/vfs_catia.c
@@ -778,12 +778,14 @@ catia_streaminfo(struct vfs_handle_struct *handle,
 
 static NTSTATUS
 catia_get_nt_acl(struct vfs_handle_struct *handle,
-		 const char *path,
+		 const struct smb_filename *smb_fname,
 		 uint32_t security_info,
 		 TALLOC_CTX *mem_ctx,
 		 struct security_descriptor **ppdesc)
 {
 	char *mapped_name = NULL;
+	const char *path = smb_fname->base_name;
+	struct smb_filename *mapped_smb_fname = NULL;
 	NTSTATUS status;
 
 	status = catia_string_replace_allocate(handle->conn,
@@ -792,9 +794,19 @@ catia_get_nt_acl(struct vfs_handle_struct *handle,
 		errno = map_errno_from_nt_status(status);
 		return status;
 	}
-	status = SMB_VFS_NEXT_GET_NT_ACL(handle, mapped_name,
+	mapped_smb_fname = synthetic_smb_fname(talloc_tos(),
+					mapped_name,
+					NULL,
+					NULL);
+	if (mapped_smb_fname == NULL) {
+		TALLOC_FREE(mapped_name);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	status = SMB_VFS_NEXT_GET_NT_ACL(handle, mapped_smb_fname,
 					 security_info, mem_ctx, ppdesc);
 	TALLOC_FREE(mapped_name);
+	TALLOC_FREE(mapped_smb_fname);
 
 	return status;
 }
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 762624b..43e65ac 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -2327,7 +2327,7 @@ static NTSTATUS vfswrap_fget_nt_acl(vfs_handle_struct *handle,
 }
 
 static NTSTATUS vfswrap_get_nt_acl(vfs_handle_struct *handle,
-				   const char *name,
+				   const struct smb_filename *smb_fname,
 				   uint32_t security_info,
 				   TALLOC_CTX *mem_ctx,
 				   struct security_descriptor **ppdesc)
@@ -2335,8 +2335,11 @@ static NTSTATUS vfswrap_get_nt_acl(vfs_handle_struct *handle,
 	NTSTATUS result;
 
 	START_PROFILE(get_nt_acl);
-	result = posix_get_nt_acl(handle->conn, name, security_info,
-				  mem_ctx, ppdesc);
+	result = posix_get_nt_acl(handle->conn,
+				smb_fname->base_name,
+				security_info,
+				mem_ctx,
+				ppdesc);
 	END_PROFILE(get_nt_acl);
 	return result;
 }
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index 904b569..9c77185 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -1897,18 +1897,18 @@ static NTSTATUS smb_full_audit_fget_nt_acl(vfs_handle_struct *handle, files_stru
 }
 
 static NTSTATUS smb_full_audit_get_nt_acl(vfs_handle_struct *handle,
-					  const char *name,
+					  const struct smb_filename *smb_fname,
 					  uint32_t security_info,
 					  TALLOC_CTX *mem_ctx,
 					  struct security_descriptor **ppdesc)
 {
 	NTSTATUS result;
 
-	result = SMB_VFS_NEXT_GET_NT_ACL(handle, name, security_info,
+	result = SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname, security_info,
 					 mem_ctx, ppdesc);
 
 	do_log(SMB_VFS_OP_GET_NT_ACL, NT_STATUS_IS_OK(result), handle,
-	       "%s", name);
+	       "%s", smb_fname_str_do_log(smb_fname));
 
 	return result;
 }
diff --git a/source3/modules/vfs_media_harmony.c b/source3/modules/vfs_media_harmony.c
index d960fae..65673e1 100644
--- a/source3/modules/vfs_media_harmony.c
+++ b/source3/modules/vfs_media_harmony.c
@@ -2016,19 +2016,20 @@ out:
  * In this case, "name" is a path.
  */
 static NTSTATUS mh_get_nt_acl(vfs_handle_struct *handle,
-			      const char *name,
+			      const struct smb_filename *smb_fname,
 			      uint32_t security_info,
 			      TALLOC_CTX *mem_ctx,
 			      struct security_descriptor **ppdesc)
 {
 	NTSTATUS status;
 	char *clientPath;
+	struct smb_filename *client_smb_fname = NULL;
 	TALLOC_CTX *ctx;
 
 	DEBUG(MH_INFO_DEBUG, ("Entering mh_get_nt_acl\n"));
-	if (!is_in_media_files(name))
+	if (!is_in_media_files(smb_fname->base_name))
 	{
-		status = SMB_VFS_NEXT_GET_NT_ACL(handle, name,
+		status = SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname,
 						 security_info,
 						 mem_ctx, ppdesc);
 		goto out;
@@ -2038,18 +2039,28 @@ static NTSTATUS mh_get_nt_acl(vfs_handle_struct *handle,
 	ctx = talloc_tos();
 
 	if (alloc_get_client_path(handle, ctx,
-				name,
+				smb_fname->base_name,
 				&clientPath))
 	{
 		status = map_nt_error_from_unix(errno);
 		goto err;
 	}
 
-	status = SMB_VFS_NEXT_GET_NT_ACL(handle, clientPath,
+	client_smb_fname = synthetic_smb_fname(talloc_tos(),
+					clientPath,
+					NULL,
+					NULL);
+	if (client_smb_fname == NULL) {
+		TALLOC_FREE(clientPath);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	status = SMB_VFS_NEXT_GET_NT_ACL(handle, client_smb_fname,
 					 security_info,
 					 mem_ctx, ppdesc);
 err:
 	TALLOC_FREE(clientPath);
+	TALLOC_FREE(client_smb_fname);
 out:
 	return status;
 }
diff --git a/source3/modules/vfs_nfs4acl_xattr.c b/source3/modules/vfs_nfs4acl_xattr.c
index b041699..c02fd6a 100644
--- a/source3/modules/vfs_nfs4acl_xattr.c
+++ b/source3/modules/vfs_nfs4acl_xattr.c
@@ -541,12 +541,14 @@ static NTSTATUS nfs4acl_xattr_fget_nt_acl(struct vfs_handle_struct *handle,
 }
 
 static NTSTATUS nfs4acl_xattr_get_nt_acl(struct vfs_handle_struct *handle,
-				  const char *name, uint32_t security_info,
+				  const struct smb_filename *smb_fname,
+				  uint32_t security_info,
 				  TALLOC_CTX *mem_ctx,
 				  struct security_descriptor **ppdesc)
 {
 	struct SMB4ACL_T *pacl;
 	NTSTATUS status;
+	const char *name = smb_fname->base_name;
 	TALLOC_CTX *frame = talloc_stackframe();
 
 	status = nfs4_get_nfs4_acl(handle, frame, name, &pacl);
diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c
index 61ef5d4..87b4cd2 100644
--- a/source3/modules/vfs_shadow_copy2.c
+++ b/source3/modules/vfs_shadow_copy2.c
@@ -1466,6 +1466,7 @@ static NTSTATUS shadow_copy2_fget_nt_acl(vfs_handle_struct *handle,
 	char *stripped;
 	NTSTATUS status;
 	char *conv;
+	struct smb_filename *smb_fname = NULL;
 
 	if (!shadow_copy2_strip_snapshot(talloc_tos(), handle,
 					 fsp->fsp_name->base_name,
@@ -1482,14 +1483,24 @@ static NTSTATUS shadow_copy2_fget_nt_acl(vfs_handle_struct *handle,
 	if (conv == NULL) {
 		return map_nt_error_from_unix(errno);
 	}
-	status = SMB_VFS_NEXT_GET_NT_ACL(handle, conv, security_info,
+	smb_fname = synthetic_smb_fname(talloc_tos(),
+					conv,
+					NULL,
+					NULL);
+	if (smb_fname == NULL) {
+		TALLOC_FREE(conv);
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	status = SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname, security_info,
 					 mem_ctx, ppdesc);
 	TALLOC_FREE(conv);
+	TALLOC_FREE(smb_fname);
 	return status;
 }
 
 static NTSTATUS shadow_copy2_get_nt_acl(vfs_handle_struct *handle,
-					const char *fname,
+					const struct smb_filename *smb_fname,
 					uint32_t security_info,
 					TALLOC_CTX *mem_ctx,
 					struct security_descriptor **ppdesc)
@@ -1498,13 +1509,17 @@ static NTSTATUS shadow_copy2_get_nt_acl(vfs_handle_struct *handle,
 	char *stripped;
 	NTSTATUS status;
 	char *conv;
+	struct smb_filename *conv_smb_fname = NULL;
 
-	if (!shadow_copy2_strip_snapshot(talloc_tos(), handle, fname,
-					 &timestamp, &stripped)) {
+	if (!shadow_copy2_strip_snapshot(talloc_tos(),
+					handle,
+					smb_fname->base_name,
+					&timestamp,
+					&stripped)) {
 		return map_nt_error_from_unix(errno);
 	}
 	if (timestamp == 0) {
-		return SMB_VFS_NEXT_GET_NT_ACL(handle, fname, security_info,
+		return SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname, security_info,
 					       mem_ctx, ppdesc);
 	}
 	conv = shadow_copy2_convert(talloc_tos(), handle, stripped, timestamp);
@@ -1512,9 +1527,18 @@ static NTSTATUS shadow_copy2_get_nt_acl(vfs_handle_struct *handle,
 	if (conv == NULL) {
 		return map_nt_error_from_unix(errno);
 	}
-	status = SMB_VFS_NEXT_GET_NT_ACL(handle, conv, security_info,
+	conv_smb_fname = synthetic_smb_fname(talloc_tos(),
+					conv,
+					NULL,
+					NULL);
+	if (conv_smb_fname == NULL) {
+		TALLOC_FREE(conv);
+		return NT_STATUS_NO_MEMORY;
+	}
+	status = SMB_VFS_NEXT_GET_NT_ACL(handle, conv_smb_fname, security_info,
 					 mem_ctx, ppdesc);
 	TALLOC_FREE(conv);
+	TALLOC_FREE(conv_smb_fname);
 	return status;
 }
 
diff --git a/source3/modules/vfs_snapper.c b/source3/modules/vfs_snapper.c
index cd7904c..970373c 100644
--- a/source3/modules/vfs_snapper.c
+++ b/source3/modules/vfs_snapper.c
@@ -2415,6 +2415,7 @@ static NTSTATUS snapper_gmt_fget_nt_acl(vfs_handle_struct *handle,
 	char *stripped;
 	NTSTATUS status;
 	char *conv;
+	struct smb_filename *smb_fname = NULL;
 
 	if (!snapper_gmt_strip_snapshot(talloc_tos(), handle,
 					fsp->fsp_name->base_name,
@@ -2431,14 +2432,24 @@ static NTSTATUS snapper_gmt_fget_nt_acl(vfs_handle_struct *handle,
 	if (conv == NULL) {
 		return map_nt_error_from_unix(errno);
 	}
-	status = SMB_VFS_NEXT_GET_NT_ACL(handle, conv, security_info,
-					 mem_ctx, ppdesc);
+
+	smb_fname = synthetic_smb_fname(talloc_tos(),
+					conv,
+					NULL,
+					NULL);
 	TALLOC_FREE(conv);
+	if (smb_fname == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	status = SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname, security_info,
+					 mem_ctx, ppdesc);
+	TALLOC_FREE(smb_fname);
 	return status;
 }
 
 static NTSTATUS snapper_gmt_get_nt_acl(vfs_handle_struct *handle,
-				       const char *fname,
+				       const struct smb_filename *fname,
 				       uint32_t security_info,
 				       TALLOC_CTX *mem_ctx,
 				       struct security_descriptor **ppdesc)
@@ -2447,8 +2458,9 @@ static NTSTATUS snapper_gmt_get_nt_acl(vfs_handle_struct *handle,
 	char *stripped;
 	NTSTATUS status;
 	char *conv;
+	struct smb_filename *smb_fname = NULL;
 
-	if (!snapper_gmt_strip_snapshot(talloc_tos(), handle, fname,
+	if (!snapper_gmt_strip_snapshot(talloc_tos(), handle, fname->base_name,
 					&timestamp, &stripped)) {
 		return map_nt_error_from_unix(errno);
 	}
@@ -2461,9 +2473,18 @@ static NTSTATUS snapper_gmt_get_nt_acl(vfs_handle_struct *handle,
 	if (conv == NULL) {
 		return map_nt_error_from_unix(errno);
 	}
-	status = SMB_VFS_NEXT_GET_NT_ACL(handle, conv, security_info,
-					 mem_ctx, ppdesc);
+	smb_fname = synthetic_smb_fname(talloc_tos(),
+					conv,
+					NULL,
+					NULL);
 	TALLOC_FREE(conv);
+	if (smb_fname == NULL) {
+		return NT_STATUS_NO_MEMORY;
+	}
+
+	status = SMB_VFS_NEXT_GET_NT_ACL(handle, smb_fname, security_info,
+					 mem_ctx, ppdesc);
+	TALLOC_FREE(smb_fname);
 	return status;
 }
 
diff --git a/source3/modules/vfs_time_audit.c b/source3/modules/vfs_time_audit.c
index 2fc6afd..6e0c8a4 100644
--- a/source3/modules/vfs_time_audit.c
+++ b/source3/modules/vfs_time_audit.c
@@ -1895,7 +1895,7 @@ static NTSTATUS smb_time_audit_fget_nt_acl(vfs_handle_struct *handle,
 }
 
 static NTSTATUS smb_time_audit_get_nt_acl(vfs_handle_struct *handle,
-					  const char *name,
+					  const struct smb_filename *smb_fname,
 					  uint32_t security_info,
 					  TALLOC_CTX *mem_ctx,


-- 
Samba Shared Repository



More information about the samba-cvs mailing list