[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Thu Apr 8 18:39:02 UTC 2021


The branch, master has been updated
       via  0332ddde1a1 VFS: Remove SMB_VFS_SET_DOS_ATTRIBUTE, no longer used
       via  e2ca529db63 s3/smbd: SMB_VFS_SET_DOS_ATTRIBUTES -> SMB_VFS_FSET_DOS_ATTRIBUTES
       via  8bdd2420e89 s3/smbd: VFS Fix incorrect VFS_FIND
      from  fc6eba619eb smbd: SMB2 Compound related chain handling when generation of FileId has failed

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


- Log -----------------------------------------------------------------
commit 0332ddde1a1d583c4e7be871c51a4854278951fe
Author: Noel Power <noel.power at suse.com>
Date:   Wed Mar 3 10:26:39 2021 +0000

    VFS: Remove SMB_VFS_SET_DOS_ATTRIBUTE, no longer used
    
                                  -------------------
                                 /                   \
                                /        REST         \
                               /          IN           \
                              /          PEACE          \
                             /                           \
                             |                           |
                             | SMB_VFS_SET_DOS_ATTRIBUTE |
                             |                           |
                             |                           |
                             |         3 March           |
                             |           2021            |
                             |                           |
                             |                           |
                            *|      *  *  *        * *   | *
                    _________)/\\_//(\/(/\)/\//\/\////\\/|_)_______
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Jeremy Allison <jra at samba.org>
    
    Autobuild-User(master): Jeremy Allison <jra at samba.org>
    Autobuild-Date(master): Thu Apr  8 18:38:40 UTC 2021 on sn-devel-184

commit e2ca529db6341ccadb8933e6a84324347392142d
Author: Noel Power <noel.power at suse.com>
Date:   Tue Mar 2 10:30:40 2021 +0000

    s3/smbd: SMB_VFS_SET_DOS_ATTRIBUTES -> SMB_VFS_FSET_DOS_ATTRIBUTES
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Jeremy Allison <jra at samba.org>

commit 8bdd2420e8972acb89a41829bddef5d857d7fb91
Author: Noel Power <noel.power at suse.com>
Date:   Wed Mar 3 11:29:43 2021 +0000

    s3/smbd: VFS Fix incorrect VFS_FIND
    
    smb_vfs_call_fset_dos_attributes is looking for the wrong function
    
    Signed-off-by: Noel Power <noel.power at suse.com>
    Reviewed-by: Jeremy Allison <jra at samba.org>

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

Summary of changes:
 examples/VFS/skel_opaque.c            |  8 ------
 examples/VFS/skel_transparent.c       | 10 --------
 source3/include/vfs.h                 |  7 ------
 source3/include/vfs_macros.h          |  4 ---
 source3/modules/vfs_catia.c           | 42 -------------------------------
 source3/modules/vfs_default.c         |  8 ------
 source3/modules/vfs_full_audit.c      | 23 -----------------
 source3/modules/vfs_gpfs.c            | 36 ---------------------------
 source3/modules/vfs_not_implemented.c |  8 ------
 source3/modules/vfs_time_audit.c      | 25 -------------------
 source3/modules/vfs_tsmsm.c           | 32 ------------------------
 source3/modules/vfs_vxfs.c            | 47 -----------------------------------
 source3/smbd/dosmode.c                | 16 ++++++++++--
 source3/smbd/vfs.c                    | 10 +-------
 14 files changed, 15 insertions(+), 261 deletions(-)


Changeset truncated at 500 lines:

diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c
index b58cfaffd22..79ed98897be 100644
--- a/examples/VFS/skel_opaque.c
+++ b/examples/VFS/skel_opaque.c
@@ -766,13 +766,6 @@ static NTSTATUS skel_fget_dos_attributes(struct vfs_handle_struct *handle,
 	return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-static NTSTATUS skel_set_dos_attributes(struct vfs_handle_struct *handle,
-				const struct smb_filename *smb_fname,
-				uint32_t dosmode)
-{
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
 static NTSTATUS skel_fset_dos_attributes(struct vfs_handle_struct *handle,
 				struct files_struct *fsp,
 				uint32_t dosmode)
@@ -1088,7 +1081,6 @@ static struct vfs_fn_pointers skel_opaque_fns = {
 	.get_dos_attributes_send_fn = skel_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = skel_get_dos_attributes_recv,
 	.fget_dos_attributes_fn = skel_fget_dos_attributes,
-	.set_dos_attributes_fn = skel_set_dos_attributes,
 	.fset_dos_attributes_fn = skel_fset_dos_attributes,
 
 	/* NT ACL operations. */
diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c
index 2a92cadd4e2..6c5e9002e16 100644
--- a/examples/VFS/skel_transparent.c
+++ b/examples/VFS/skel_transparent.c
@@ -1022,15 +1022,6 @@ static NTSTATUS skel_fget_dos_attributes(struct vfs_handle_struct *handle,
 				dosmode);
 }
 
-static NTSTATUS skel_set_dos_attributes(struct vfs_handle_struct *handle,
-				const struct smb_filename *smb_fname,
-				uint32_t dosmode)
-{
-	return SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle,
-				smb_fname,
-				dosmode);
-}
-
 static NTSTATUS skel_fset_dos_attributes(struct vfs_handle_struct *handle,
 				struct files_struct *fsp,
 				uint32_t dosmode)
@@ -1395,7 +1386,6 @@ static struct vfs_fn_pointers skel_transparent_fns = {
 	.get_dos_attributes_send_fn = skel_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = skel_get_dos_attributes_recv,
 	.fget_dos_attributes_fn = skel_fget_dos_attributes,
-	.set_dos_attributes_fn = skel_set_dos_attributes,
 	.fset_dos_attributes_fn = skel_fset_dos_attributes,
 
 	/* NT ACL operations. */
diff --git a/source3/include/vfs.h b/source3/include/vfs.h
index 678db0b861f..d06a62e5151 100644
--- a/source3/include/vfs.h
+++ b/source3/include/vfs.h
@@ -1161,10 +1161,6 @@ struct vfs_fn_pointers {
 					   struct files_struct *fsp,
 					   uint32_t *dosmode);
 
-	NTSTATUS (*set_dos_attributes_fn)(struct vfs_handle_struct *handle,
-					  const struct smb_filename *smb_fname,
-					  uint32_t dosmode);
-
 	NTSTATUS (*fset_dos_attributes_fn)(struct vfs_handle_struct *hande,
 					   struct files_struct *fsp,
 					   uint32_t dosmode);
@@ -1630,9 +1626,6 @@ NTSTATUS smb_vfs_call_fsctl(struct vfs_handle_struct *handle,
 NTSTATUS smb_vfs_call_fget_dos_attributes(struct vfs_handle_struct *handle,
 					  struct files_struct *fsp,
 					  uint32_t *dosmode);
-NTSTATUS smb_vfs_call_set_dos_attributes(struct vfs_handle_struct *handle,
-					 const struct smb_filename *smb_fname,
-					 uint32_t dosmode);
 NTSTATUS smb_vfs_call_fset_dos_attributes(struct vfs_handle_struct *handle,
 					  struct files_struct *fsp,
 					  uint32_t dosmode);
diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h
index fe26c8fa347..9ec9330095a 100644
--- a/source3/include/vfs_macros.h
+++ b/source3/include/vfs_macros.h
@@ -414,10 +414,6 @@
 #define SMB_VFS_NEXT_GET_DOS_ATTRIBUTES_RECV(req, aio_state, dosmode) \
 	smb_vfs_call_get_dos_attributes_recv((req), (aio_state), (dosmode))
 
-#define SMB_VFS_SET_DOS_ATTRIBUTES(conn, smb_fname, attributes) \
-	smb_vfs_call_set_dos_attributes((conn)->vfs_handles, (smb_fname), (attributes))
-#define SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle, smb_fname, attributes) \
-	smb_vfs_call_set_dos_attributes((handle)->next, (smb_fname), (attributes))
 #define SMB_VFS_FSET_DOS_ATTRIBUTES(conn, fsp, attributes) \
 	smb_vfs_call_fset_dos_attributes((conn)->vfs_handles, (fsp), (attributes))
 #define SMB_VFS_NEXT_FSET_DOS_ATTRIBUTES(handle, fsp, attributes) \
diff --git a/source3/modules/vfs_catia.c b/source3/modules/vfs_catia.c
index de291ba7c31..cb06a4de355 100644
--- a/source3/modules/vfs_catia.c
+++ b/source3/modules/vfs_catia.c
@@ -2075,47 +2075,6 @@ static NTSTATUS catia_readdir_attr(struct vfs_handle_struct *handle,
 	return status;
 }
 
-static NTSTATUS catia_set_dos_attributes(struct vfs_handle_struct *handle,
-					 const struct smb_filename *smb_fname,
-					 uint32_t dosmode)
-{
-	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,
-				path, &mapped_name, vfs_translate_to_unix);
-	if (!NT_STATUS_IS_OK(status)) {
-		errno = map_errno_from_nt_status(status);
-		return status;
-	}
-	status = synthetic_pathref(talloc_tos(),
-					handle->conn->cwd_fsp,
-					mapped_name,
-					NULL,
-					&smb_fname->st,
-					smb_fname->twrp,
-					smb_fname->flags,
-					&mapped_smb_fname);
-	/*
-	 * how about NT_STATUS_OBJECT_NAME_NOT_FOUND / link ? not sure
-	 * if we let that go and return success or not :/
-	 */
-
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	status = SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle,
-						 mapped_smb_fname,
-						 dosmode);
-	TALLOC_FREE(mapped_name);
-	TALLOC_FREE(mapped_smb_fname);
-
-	return status;
-}
-
 static NTSTATUS catia_create_dfs_pathat(struct vfs_handle_struct *handle,
 			struct files_struct *dirfsp,
 			const struct smb_filename *smb_fname,
@@ -2246,7 +2205,6 @@ static struct vfs_fn_pointers vfs_catia_fns = {
 	.fsctl_fn = catia_fsctl,
 	.get_dos_attributes_send_fn = vfs_not_implemented_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = vfs_not_implemented_get_dos_attributes_recv,
-	.set_dos_attributes_fn = catia_set_dos_attributes,
 	.fset_dos_attributes_fn = catia_fset_dos_attributes,
 	.fget_dos_attributes_fn = catia_fget_dos_attributes,
 	.fget_compression_fn = catia_fget_compression,
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index a3557fe2d14..58891a2c1c3 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -1865,13 +1865,6 @@ static NTSTATUS vfswrap_fget_dos_attributes(struct vfs_handle_struct *handle,
 	return fget_ea_dos_attribute(fsp, dosmode);
 }
 
-static NTSTATUS vfswrap_set_dos_attributes(struct vfs_handle_struct *handle,
-					   const struct smb_filename *smb_fname,
-					   uint32_t dosmode)
-{
-	return set_ea_dos_attribute(handle->conn, smb_fname, dosmode);
-}
-
 static NTSTATUS vfswrap_fset_dos_attributes(struct vfs_handle_struct *handle,
 					    struct files_struct *fsp,
 					    uint32_t dosmode)
@@ -3836,7 +3829,6 @@ static struct vfs_fn_pointers vfs_default_fns = {
 	.strict_lock_check_fn = vfswrap_strict_lock_check,
 	.translate_name_fn = vfswrap_translate_name,
 	.fsctl_fn = vfswrap_fsctl,
-	.set_dos_attributes_fn = vfswrap_set_dos_attributes,
 	.fset_dos_attributes_fn = vfswrap_fset_dos_attributes,
 	.get_dos_attributes_send_fn = vfswrap_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = vfswrap_get_dos_attributes_recv,
diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c
index bbe5ea55dde..73e83909341 100644
--- a/source3/modules/vfs_full_audit.c
+++ b/source3/modules/vfs_full_audit.c
@@ -185,7 +185,6 @@ typedef enum _vfs_op_type {
 	SMB_VFS_OP_GET_DOS_ATTRIBUTES_SEND,
 	SMB_VFS_OP_GET_DOS_ATTRIBUTES_RECV,
 	SMB_VFS_OP_FGET_DOS_ATTRIBUTES,
-	SMB_VFS_OP_SET_DOS_ATTRIBUTES,
 	SMB_VFS_OP_FSET_DOS_ATTRIBUTES,
 
 	/* NT ACL operations. */
@@ -323,7 +322,6 @@ static struct {
 	{ SMB_VFS_OP_GET_DOS_ATTRIBUTES_SEND, "get_dos_attributes_send" },
 	{ SMB_VFS_OP_GET_DOS_ATTRIBUTES_RECV, "get_dos_attributes_recv" },
 	{ SMB_VFS_OP_FGET_DOS_ATTRIBUTES, "fget_dos_attributes" },
-	{ SMB_VFS_OP_SET_DOS_ATTRIBUTES, "set_dos_attributes" },
 	{ SMB_VFS_OP_FSET_DOS_ATTRIBUTES, "fset_dos_attributes" },
 	{ SMB_VFS_OP_FGET_NT_ACL,	"fget_nt_acl" },
 	{ SMB_VFS_OP_GET_NT_ACL_AT,	"get_nt_acl_at" },
@@ -2432,26 +2430,6 @@ static NTSTATUS smb_full_audit_fget_dos_attributes(
 	return status;
 }
 
-static NTSTATUS smb_full_audit_set_dos_attributes(
-				struct vfs_handle_struct *handle,
-				const struct smb_filename *smb_fname,
-				uint32_t dosmode)
-{
-	NTSTATUS status;
-
-	status = SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle,
-				smb_fname,
-				dosmode);
-
-	do_log(SMB_VFS_OP_SET_DOS_ATTRIBUTES,
-		NT_STATUS_IS_OK(status),
-		handle,
-		"%s",
-		smb_fname_str_do_log(handle->conn, smb_fname));
-
-	return status;
-}
-
 static NTSTATUS smb_full_audit_fset_dos_attributes(
 				struct vfs_handle_struct *handle,
 				struct files_struct *fsp,
@@ -3028,7 +3006,6 @@ static struct vfs_fn_pointers vfs_full_audit_fns = {
 	.get_dos_attributes_send_fn = smb_full_audit_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = smb_full_audit_get_dos_attributes_recv,
 	.fget_dos_attributes_fn = smb_full_audit_fget_dos_attributes,
-	.set_dos_attributes_fn = smb_full_audit_set_dos_attributes,
 	.fset_dos_attributes_fn = smb_full_audit_fset_dos_attributes,
 	.fget_nt_acl_fn = smb_full_audit_fget_nt_acl,
 	.get_nt_acl_at_fn = smb_full_audit_get_nt_acl_at,
diff --git a/source3/modules/vfs_gpfs.c b/source3/modules/vfs_gpfs.c
index 172194dbead..48c9c6d1439 100644
--- a/source3/modules/vfs_gpfs.c
+++ b/source3/modules/vfs_gpfs.c
@@ -1714,41 +1714,6 @@ static NTSTATUS vfs_gpfs_fget_dos_attributes(struct vfs_handle_struct *handle,
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS vfs_gpfs_set_dos_attributes(struct vfs_handle_struct *handle,
-					   const struct smb_filename *smb_fname,
-					   uint32_t dosmode)
-{
-	struct gpfs_config_data *config;
-	struct gpfs_winattr attrs = { };
-	int ret;
-
-	SMB_VFS_HANDLE_GET_DATA(handle, config,
-				struct gpfs_config_data,
-				return NT_STATUS_INTERNAL_ERROR);
-
-	if (!config->winattr) {
-		return SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle,
-						       smb_fname, dosmode);
-	}
-
-	attrs.winAttrs = vfs_gpfs_dosmode_to_winattrs(dosmode);
-	ret = gpfswrap_set_winattrs_path(smb_fname->base_name,
-					 GPFS_WINATTR_SET_ATTRS, &attrs);
-
-	if (ret == -1 && errno == ENOSYS) {
-		return SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle,
-						       smb_fname, dosmode);
-	}
-
-	if (ret == -1) {
-		DBG_WARNING("Setting winattrs failed for %s: %s\n",
-			    smb_fname->base_name, strerror(errno));
-		return map_nt_error_from_unix(errno);
-	}
-
-	return NT_STATUS_OK;
-}
-
 static NTSTATUS vfs_gpfs_fset_dos_attributes(struct vfs_handle_struct *handle,
 					     struct files_struct *fsp,
 					     uint32_t dosmode)
@@ -2619,7 +2584,6 @@ static struct vfs_fn_pointers vfs_gpfs_fns = {
 	.get_dos_attributes_send_fn = vfs_not_implemented_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = vfs_not_implemented_get_dos_attributes_recv,
 	.fget_dos_attributes_fn = vfs_gpfs_fget_dos_attributes,
-	.set_dos_attributes_fn = vfs_gpfs_set_dos_attributes,
 	.fset_dos_attributes_fn = vfs_gpfs_fset_dos_attributes,
 	.fget_nt_acl_fn = gpfsacl_fget_nt_acl,
 	.get_nt_acl_at_fn = gpfsacl_get_nt_acl_at,
diff --git a/source3/modules/vfs_not_implemented.c b/source3/modules/vfs_not_implemented.c
index 2b4e534dffb..0163bed084e 100644
--- a/source3/modules/vfs_not_implemented.c
+++ b/source3/modules/vfs_not_implemented.c
@@ -770,13 +770,6 @@ NTSTATUS vfs_not_implemented_fget_dos_attributes(struct vfs_handle_struct *handl
 	return NT_STATUS_NOT_IMPLEMENTED;
 }
 
-NTSTATUS vfs_not_implemented_set_dos_attributes(struct vfs_handle_struct *handle,
-						const struct smb_filename *smb_fname,
-						uint32_t dosmode)
-{
-	return NT_STATUS_NOT_IMPLEMENTED;
-}
-
 NTSTATUS vfs_not_implemented_fset_dos_attributes(struct vfs_handle_struct *handle,
 						 struct files_struct *fsp,
 						 uint32_t dosmode)
@@ -1092,7 +1085,6 @@ static struct vfs_fn_pointers vfs_not_implemented_fns = {
 	.get_dos_attributes_send_fn = vfs_not_implemented_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = vfs_not_implemented_get_dos_attributes_recv,
 	.fget_dos_attributes_fn = vfs_not_implemented_fget_dos_attributes,
-	.set_dos_attributes_fn = vfs_not_implemented_set_dos_attributes,
 	.fset_dos_attributes_fn = vfs_not_implemented_fset_dos_attributes,
 
 	/* NT ACL operations. */
diff --git a/source3/modules/vfs_time_audit.c b/source3/modules/vfs_time_audit.c
index 97e893b9ba4..212b2c76d9a 100644
--- a/source3/modules/vfs_time_audit.c
+++ b/source3/modules/vfs_time_audit.c
@@ -1975,30 +1975,6 @@ static NTSTATUS smb_time_fget_dos_attributes(struct vfs_handle_struct *handle,
 	return result;
 }
 
-static NTSTATUS smb_time_set_dos_attributes(struct vfs_handle_struct *handle,
-					const struct smb_filename *smb_fname,
-					uint32_t dosmode)
-{
-	NTSTATUS result;
-	struct timespec ts1,ts2;
-	double timediff;
-
-	clock_gettime_mono(&ts1);
-	result = SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle,
-				smb_fname,
-				dosmode);
-	clock_gettime_mono(&ts2);
-	timediff = nsec_time_diff(&ts2,&ts1)*1.0e-9;
-
-	if (timediff > audit_timeout) {
-		smb_time_audit_log_fname("set_dos_attributes",
-				timediff,
-				smb_fname->base_name);
-	}
-
-	return result;
-}
-
 static NTSTATUS smb_time_fset_dos_attributes(struct vfs_handle_struct *handle,
 					struct files_struct *fsp,
 					uint32_t dosmode)
@@ -2874,7 +2850,6 @@ static struct vfs_fn_pointers vfs_time_audit_fns = {
 	.get_dos_attributes_send_fn = smb_time_audit_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = smb_time_audit_get_dos_attributes_recv,
 	.fget_dos_attributes_fn = smb_time_fget_dos_attributes,
-	.set_dos_attributes_fn = smb_time_set_dos_attributes,
 	.fset_dos_attributes_fn = smb_time_fset_dos_attributes,
 	.fget_nt_acl_fn = smb_time_audit_fget_nt_acl,
 	.get_nt_acl_at_fn = smb_time_audit_get_nt_acl_at,
diff --git a/source3/modules/vfs_tsmsm.c b/source3/modules/vfs_tsmsm.c
index eacbd0f59f0..eda25fa39e3 100644
--- a/source3/modules/vfs_tsmsm.c
+++ b/source3/modules/vfs_tsmsm.c
@@ -519,37 +519,6 @@ static NTSTATUS tsmsm_set_offline(struct vfs_handle_struct *handle,
 	return NT_STATUS_OK;
 }
 
-static NTSTATUS tsmsm_set_dos_attributes(struct vfs_handle_struct *handle,
-					 const struct smb_filename *smb_fname,
-					 uint32_t dosmode)
-{
-	NTSTATUS status;
-	uint32_t old_dosmode;
-	struct smb_filename *fname = NULL;
-
-	/* dos_mode() doesn't like const smb_fname */
-	fname = cp_smb_filename(talloc_tos(), smb_fname);
-	if (fname == NULL) {
-		return NT_STATUS_NO_MEMORY;
-	}
-
-	old_dosmode = fdos_mode(smb_fname->fsp);
-	TALLOC_FREE(fname);
-
-	status = SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle, smb_fname, dosmode);
-	if (!NT_STATUS_IS_OK(status)) {
-		return status;
-	}
-
-	if (!(old_dosmode & FILE_ATTRIBUTE_OFFLINE) &&
-	    (dosmode & FILE_ATTRIBUTE_OFFLINE))
-	{
-		return NT_STATUS_OK;
-	}
-
-	return tsmsm_set_offline(handle, smb_fname);
-}
-
 static NTSTATUS tsmsm_fset_dos_attributes(struct vfs_handle_struct *handle,
 					  struct files_struct *fsp,
 					  uint32_t dosmode)
@@ -590,7 +559,6 @@ static struct vfs_fn_pointers tsmsm_fns = {
 	.pwrite_send_fn = tsmsm_pwrite_send,
 	.pwrite_recv_fn = tsmsm_pwrite_recv,
 	.sendfile_fn = tsmsm_sendfile,
-	.set_dos_attributes_fn = tsmsm_set_dos_attributes,
 	.fset_dos_attributes_fn = tsmsm_fset_dos_attributes,
 	.get_dos_attributes_send_fn = vfs_not_implemented_get_dos_attributes_send,
 	.get_dos_attributes_recv_fn = vfs_not_implemented_get_dos_attributes_recv,
diff --git a/source3/modules/vfs_vxfs.c b/source3/modules/vfs_vxfs.c
index 6c6f92e1f52..adf687b58a5 100644
--- a/source3/modules/vfs_vxfs.c
+++ b/source3/modules/vfs_vxfs.c
@@ -661,52 +661,6 @@ static ssize_t vxfs_flistxattr(struct vfs_handle_struct *handle,
         return result;
 }
 
-static NTSTATUS vxfs_set_ea_dos_attributes(struct vfs_handle_struct *handle,
-					   const struct smb_filename *smb_fname,
-					   uint32_t dosmode)
-{
-	NTSTATUS	err;
-	int			ret = 0;
-	bool		attrset = false;
-	bool		is_dir = false;
-
-	DBG_DEBUG("Entered function\n");
-
-	is_dir = S_ISDIR(smb_fname->st.st_ex_mode);
-	if (!(dosmode & FILE_ATTRIBUTE_READONLY)) {
-		ret = vxfs_checkwxattr_path(smb_fname->base_name);
-		if (ret == -1) {
-			DBG_DEBUG("ret:%d\n", ret);
-			if ((errno != EOPNOTSUPP) && (errno != ENOENT)) {
-				return map_nt_error_from_unix(errno);
-			}
-		}
-	}
-	if (dosmode & FILE_ATTRIBUTE_READONLY) {
-		ret = vxfs_setwxattr_path(smb_fname->base_name, is_dir);
-		DBG_DEBUG("ret:%d\n", ret);
-		if (ret == -1) {
-			if ((errno != EOPNOTSUPP) && (errno != EINVAL)) {
-				return map_nt_error_from_unix(errno);
-			}
-		} else {
-			attrset = true;
-		}
-	}
-	err = SMB_VFS_NEXT_SET_DOS_ATTRIBUTES(handle, smb_fname, dosmode);
-	if (!NT_STATUS_IS_OK(err)) {
-		if (attrset) {
-			ret = vxfs_clearwxattr_path(smb_fname->base_name, is_dir);
-			DBG_DEBUG("ret:%d\n", ret);
-			if ((ret == -1) && (errno != ENOENT)) {
-				return map_nt_error_from_unix(errno);
-			}
-		}
-	}
-
-	return err;
-}
-
 static NTSTATUS vxfs_fset_ea_dos_attributes(struct vfs_handle_struct *handle,
 					    struct files_struct *fsp,
 					    uint32_t dosmode)
@@ -773,7 +727,6 @@ static struct vfs_fn_pointers vfs_vxfs_fns = {
 	.sys_acl_set_fd_fn = vxfs_sys_acl_set_fd,
 #endif
 
-	.set_dos_attributes_fn = vxfs_set_ea_dos_attributes,
 	.fset_dos_attributes_fn = vxfs_fset_ea_dos_attributes,
 	.getxattr_fn = vxfs_get_xattr,
 	.getxattrat_send_fn = vfs_not_implemented_getxattrat_send,
diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c
index aaa0924cb9d..a9d73e5f34b 100644
--- a/source3/smbd/dosmode.c
+++ b/source3/smbd/dosmode.c
@@ -967,8 +967,15 @@ int file_set_dosmode(connection_struct *conn,
 	else
 		dosmode &= ~FILE_ATTRIBUTE_DIRECTORY;
 
-	/* Store the DOS attributes in an EA by preference. */
-	status = SMB_VFS_SET_DOS_ATTRIBUTES(conn, smb_fname, dosmode);
+	if (smb_fname->fsp != NULL) {
+		/* Store the DOS attributes in an EA by preference. */
+		status = SMB_VFS_FSET_DOS_ATTRIBUTES(conn,
+						     smb_fname->fsp,
+						     dosmode);
+	} else {
+		status = NT_STATUS_OBJECT_NAME_NOT_FOUND;
+	}
+
 	if (NT_STATUS_IS_OK(status)) {
 		if (!newfile) {
 			notify_fname(conn, NOTIFY_ACTION_MODIFIED,
@@ -1323,6 +1330,11 @@ NTSTATUS set_create_timespec_ea(connection_struct *conn,
 	dosmode = fdos_mode(psmb_fname->fsp);
 
 	smb_fname->st.st_ex_btime = create_time;
+	/*


-- 
Samba Shared Repository



More information about the samba-cvs mailing list