The branch, master has been updated via 4a41d970b47 Update status of SMB_VFS_REMOVEXATTR via 38a06183af2 VFS: Remove SMB_VFS_REMOVEXATTR, no longer used via 721c604d289 s3: VFS: unityed_media: Remove um_removexattr(). No longer called. via ff9ab093309 s3: VFS: time_audit: Remove smb_time_audit_removexattr(). No longer called. via a1afcc0720e s3: VFS: snapper: Remove snapper_gmt_removexattr(). No longer called. via b88d3473887 s3: VFS: shadow_copy2: Remove shadow_copy2_removexattr(). No longer called. via b9a5cd874d4 s3: VFS: posix_eadb: Remove posix_eadb_removexattr(). No longer called. via e12449e047e s3: VFS: media_harmony: Remove mh_removexattr(). No longer called. via f227fd22a64 s3: VFS: glusterfs: Remove vfs_gluster_removexattr(). No longer called. via 699c829bec8 s3: VFS: full_audit: Remove smb_full_audit_removexattr(). No longer called. via 469e7dc236c s3: VFS: ceph_snapshots: Remove ceph_snap_gmt_removexattr(). No longer called. via 899f520eb9d s3: VFS: ceph: Remove cephwrap_removexattr(). No longer called. via 2e8e6c31e45 s3: VFS: catia: Remove catia_removexattr(). No longer called. via ce9b1698f92 s3: VFS: cap: Remove cap_removexattr(). No longer called. via b0e34a47d44 s3: VFS: xattr_tdb: Remove xattr_tdb_removexattr(). No longer called. via b2a06e71cad s3: VFS: vxfs: Remove vxfs_remove_xattr() - no longer called. via 14ac9296c96 s3: torture: Change cmd_removexattr to use SMB_VFS_FREMOVEXATTR(). via 4f977b61e90 s3: smbd: Change SMB_VFS_REMOVEXATTR -> SMB_VFS_FREMOVEXATTR. via 3b0778be143 VFS: posixacl_xattr: In posixacl_xattr_acl_delete_def_file() change SMB_VFS_REMOVEXATTR() -> SMB_VFS_FREMOVEXATTR(). via f6cd9a548fa VFS: streams_xattr: In streams_xattr_renameat(), change SMB_VFS_REMOVEXATTR() -> SMB_VFS_FREMOVEXATTR(). via 4d978b940e7 lib: adouble: Use FREMOVEXATTR in preference to REMOVEXATTR. via bee6b16ce41 VFS: fake_acls: Clean up fake_acls_sys_acl_delete_def_file(). via 0c335a325d8 VFS: gluster: Allow vfs_gluster_fremovexattr() to cope with pathref fsps. via ea1b763b6a6 VFS: ceph: Allow cephwrap_fremovexattr() to cope with pathref fsps. via a2fd9df127a VFS: nfs4acl_xattr: Change nfs4acl_validate_blob() to use the fsp instead of the name. via b094144abbc VFS: nfs4acl_xattr: Ensure remove smb_fname argument from nfs4acl_get_blob(). via 9f80f787e0d VFS: nfs4acl_xattr: Ensure nfs4acl_get_blob() always gets a valid fsp pointer. from d590d9130ee s3: smbd: Fix parent_pathref() to cope with symlink parents.
https://git.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 4a41d970b4717e717911b5096cb8fee22a0802c4 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 12:36:39 2021 -0700 Update status of SMB_VFS_REMOVEXATTR Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> Autobuild-User(master): Ralph Böhme <s...@samba.org> Autobuild-Date(master): Wed Apr 7 17:32:07 UTC 2021 on sn-devel-184 commit 38a06183af20684706e10294ef5499e2c486bb03 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 12:33:46 2021 -0700 VFS: Remove SMB_VFS_REMOVEXATTR, no longer used --------------- / \ / REST \ / IN \ / PEACE \ / \ | | | SMB_VFS_REMOVEXATTR | | | | | | 22 March | | 2021 | | | | | *| * * * | * _________)/\\_//(\/(/\)/\//\/\////|_)_______ Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 721c604d289b0d1784299d372253653b86cc35d9 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 12:21:00 2021 -0700 s3: VFS: unityed_media: Remove um_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit ff9ab093309d127cde497a29f24a702e978b49c0 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 12:14:25 2021 -0700 s3: VFS: time_audit: Remove smb_time_audit_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit a1afcc0720e374d8fbc24db1097d082d00493925 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 12:13:15 2021 -0700 s3: VFS: snapper: Remove snapper_gmt_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit b88d347388735657602a9e50a55c9265ffbe97b4 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 12:05:02 2021 -0700 s3: VFS: shadow_copy2: Remove shadow_copy2_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit b9a5cd874d46ddfd3e486124cea4428b66e52f45 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 12:02:08 2021 -0700 s3: VFS: posix_eadb: Remove posix_eadb_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit e12449e047e6487f6587fd5e4b9c60e0f08826ea Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 11:54:14 2021 -0700 s3: VFS: media_harmony: Remove mh_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit f227fd22a64aac0e71fd4234df1e5bc1c6ef5864 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 11:46:11 2021 -0700 s3: VFS: glusterfs: Remove vfs_gluster_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 699c829bec895293132361c316c97dded2a8a828 Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 11:34:02 2021 -0700 s3: VFS: full_audit: Remove smb_full_audit_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 469e7dc236c79ae48535daeab9ec775b58994f3d Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 11:20:07 2021 -0700 s3: VFS: ceph_snapshots: Remove ceph_snap_gmt_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 899f520eb9d0cb97c4e050b00084cf88f55f944b Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 11:14:16 2021 -0700 s3: VFS: ceph: Remove cephwrap_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 2e8e6c31e459776c1e9c1df76748c6882f6804fb Author: Jeremy Allison <j...@samba.org> Date: Mon Mar 22 11:13:14 2021 -0700 s3: VFS: catia: Remove catia_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit ce9b1698f9290aa73eacf073c4815d7a9fb8b5d4 Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 19 14:22:24 2021 -0700 s3: VFS: cap: Remove cap_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit b0e34a47d4492280a46bc20b03fb287c741d3ade Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 19 14:04:22 2021 -0700 s3: VFS: xattr_tdb: Remove xattr_tdb_removexattr(). No longer called. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit b2a06e71cad98b730d26ca0cb9ebe7eb516a10a9 Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 19 14:02:17 2021 -0700 s3: VFS: vxfs: Remove vxfs_remove_xattr() - no longer called. Also remove supporting function from lib_vxfs.c. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 14ac9296c96ea3177b1b57a0dcfc7a1bff961efa Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 19 13:12:12 2021 -0700 s3: torture: Change cmd_removexattr to use SMB_VFS_FREMOVEXATTR(). The last user of SMB_VFS_REMOVEXATTR() is gone, I can now remove the internal VFS functions implementing it. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 4f977b61e906d0b9f68daa646cb0ff656a3768d2 Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 11 13:42:31 2021 -0800 s3: smbd: Change SMB_VFS_REMOVEXATTR -> SMB_VFS_FREMOVEXATTR. We no longer need pathname based xattr remove. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 3b0778be143245c4fc748abb421f550b863461ff Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 12 14:47:37 2021 -0800 VFS: posixacl_xattr: In posixacl_xattr_acl_delete_def_file() change SMB_VFS_REMOVEXATTR() -> SMB_VFS_FREMOVEXATTR(). We know this is safe as SMB_VFS_SYS_ACL_DELETE_DEF_FILE() is only ever called on an fsp->fsp_name. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit f6cd9a548fa646a7916ce424b8242f1fd6ffc543 Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 12 14:36:49 2021 -0800 VFS: streams_xattr: In streams_xattr_renameat(), change SMB_VFS_REMOVEXATTR() -> SMB_VFS_FREMOVEXATTR(). Note that now we're doing this by handle not by pathname we must do it on the base_fsp, as we have to remove the actual xattr on the base file. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 4d978b940e751143d7e47aadbc58e2e53aa0ca20 Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 12 14:33:14 2021 -0800 lib: adouble: Use FREMOVEXATTR in preference to REMOVEXATTR. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit bee6b16ce41092659e84015e22ad618c63955a48 Author: Jeremy Allison <j...@samba.org> Date: Thu Mar 11 16:36:09 2021 -0800 VFS: fake_acls: Clean up fake_acls_sys_acl_delete_def_file(). Change SMB_VFS_NEXT_REMOVEXATTR() -> SMB_VFS_NEXT_FREMOVEXATTR(). It doesn't need to do STAT calls, it's always called with an fsp->fsp_name smb_filename. This will change later to a handle-based call. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 0c335a325d8ffcc71543d9e8503a47496dc6afb7 Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 12 14:19:28 2021 -0800 VFS: gluster: Allow vfs_gluster_fremovexattr() to cope with pathref fsps. Ensure it only uses an io fd for a handle based call. Otherwise fall back to pathname based. This is the same as the fallback used in vfs_default.c Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit ea1b763b6a6785f6dacd0d264948f32ab1ba6f92 Author: Jeremy Allison <j...@samba.org> Date: Fri Mar 12 14:16:05 2021 -0800 VFS: ceph: Allow cephwrap_fremovexattr() to cope with pathref fsps. Ensure it only uses an io fd for a handle based call. Otherwise fall back to pathname based. This is the same as the fallback used in vfs_default.c Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit a2fd9df127a775f0554a2aeab173605a615ffa89 Author: Jeremy Allison <j...@samba.org> Date: Thu Apr 1 13:33:35 2021 -0700 VFS: nfs4acl_xattr: Change nfs4acl_validate_blob() to use the fsp instead of the name. Changes use of SMB_VFS_REMOVEXATTR() -> SMB_VFS_FREMOVEXATTR(). Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit b094144abbce1ba154454ec1e7877f57a08f2377 Author: Jeremy Allison <j...@samba.org> Date: Thu Apr 1 13:22:15 2021 -0700 VFS: nfs4acl_xattr: Ensure remove smb_fname argument from nfs4acl_get_blob(). Now we know we always have a valid fsp, use it. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> commit 9f80f787e0d42365fac410a2ea042698e4b5ba13 Author: Jeremy Allison <j...@samba.org> Date: Thu Apr 1 13:16:34 2021 -0700 VFS: nfs4acl_xattr: Ensure nfs4acl_get_blob() always gets a valid fsp pointer. This means adding a synthetic_pathref() call into the nfs4acl_xattr version of SMB_VFS_GET_NT_ACL_AT() which is the pathname-based ACL fetch call. One place where this (smb_fname->fsp == NULL) can happen is from open when checking parent directory ACL - check_parent_access() currently isn't always passed a smb_fname with a valid fsp and check_parent_access() currently doesn't open a pathref smb_fname->fsp itself (eventually it should be passed in a pathref from the caller). There are also a few other places inside smbd that call smbd_check_access_rights() also without a pathref fsp. This check should be moved into the callers inside smbd to ensure that smb_fname->fsp is always valid here, and in a later patchset (not part of this set) I will do just that. Ultimately it may be possible to remove pathname based SMB_VFS_GET_NT_ACL_AT(), this requires further investigation. But until then, we need this change. Signed-off-by: Jeremy Allison <j...@samba.org> Reviewed-by: Ralph Boehme <s...@samba.org> ----------------------------------------------------------------------- Summary of changes: examples/VFS/skel_opaque.c | 9 --- examples/VFS/skel_transparent.c | 8 --- source3/include/vfs.h | 10 +-- source3/include/vfs_macros.h | 5 -- source3/lib/adouble.c | 3 +- source3/modules/The_New_VFS.org | 2 +- source3/modules/The_New_VFS.txt | 2 +- source3/modules/lib_vxfs.c | 21 ------- source3/modules/posixacl_xattr.c | 3 +- source3/modules/vfs_cap.c | 40 ------------ source3/modules/vfs_catia.c | 58 ----------------- source3/modules/vfs_ceph.c | 27 ++++---- source3/modules/vfs_ceph_snapshots.c | 22 ------- source3/modules/vfs_default.c | 8 --- source3/modules/vfs_fake_acls.c | 21 +------ source3/modules/vfs_full_audit.c | 19 ------ source3/modules/vfs_glusterfs.c | 23 ++++--- source3/modules/vfs_media_harmony.c | 33 ---------- source3/modules/vfs_nfs4acl_xattr.c | 113 ++++++++++++++++++++++------------ source3/modules/vfs_not_implemented.c | 9 --- source3/modules/vfs_posix_eadb.c | 12 ---- source3/modules/vfs_shadow_copy2.c | 21 ------- source3/modules/vfs_snapper.c | 21 ------- source3/modules/vfs_streams_xattr.c | 11 +++- source3/modules/vfs_time_audit.c | 22 ------- source3/modules/vfs_unityed_media.c | 29 --------- source3/modules/vfs_vxfs.c | 52 ---------------- source3/modules/vfs_vxfs.h | 1 - source3/modules/vfs_xattr_tdb.c | 28 --------- source3/smbd/trans2.c | 18 ++---- source3/smbd/vfs.c | 8 --- source3/torture/cmd_vfs.c | 24 +++++--- 32 files changed, 134 insertions(+), 549 deletions(-) Changeset truncated at 500 lines: diff --git a/examples/VFS/skel_opaque.c b/examples/VFS/skel_opaque.c index 92ae46f7f5a..b58cfaffd22 100644 --- a/examples/VFS/skel_opaque.c +++ b/examples/VFS/skel_opaque.c @@ -933,14 +933,6 @@ static ssize_t skel_flistxattr(vfs_handle_struct *handle, return -1; } -static int skel_removexattr(vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name) -{ - errno = ENOSYS; - return -1; -} - static int skel_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name) { @@ -1120,7 +1112,6 @@ static struct vfs_fn_pointers skel_opaque_fns = { .getxattrat_recv_fn = skel_getxattrat_recv, .fgetxattr_fn = skel_fgetxattr, .flistxattr_fn = skel_flistxattr, - .removexattr_fn = skel_removexattr, .fremovexattr_fn = skel_fremovexattr, .fsetxattr_fn = skel_fsetxattr, diff --git a/examples/VFS/skel_transparent.c b/examples/VFS/skel_transparent.c index 93e5626f8ac..2a92cadd4e2 100644 --- a/examples/VFS/skel_transparent.c +++ b/examples/VFS/skel_transparent.c @@ -1226,13 +1226,6 @@ static ssize_t skel_flistxattr(vfs_handle_struct *handle, return SMB_VFS_NEXT_FLISTXATTR(handle, fsp, list, size); } -static int skel_removexattr(vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name) -{ - return SMB_VFS_NEXT_REMOVEXATTR(handle, smb_fname, name); -} - static int skel_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name) { @@ -1426,7 +1419,6 @@ static struct vfs_fn_pointers skel_transparent_fns = { .getxattrat_recv_fn = skel_getxattrat_recv, .fgetxattr_fn = skel_fgetxattr, .flistxattr_fn = skel_flistxattr, - .removexattr_fn = skel_removexattr, .fremovexattr_fn = skel_fremovexattr, .fsetxattr_fn = skel_fsetxattr, diff --git a/source3/include/vfs.h b/source3/include/vfs.h index 96477f27e89..678db0b861f 100644 --- a/source3/include/vfs.h +++ b/source3/include/vfs.h @@ -345,6 +345,7 @@ * Change to Version 45 - will ship with 4.15 * Version 45 - Remove SMB_VFS_LISTXATTR * Version 45 - Remove SMB_VFS_SETXATTR + * Version 45 - Remove SMB_VFS_REMOVEXATTR */ #define SMB_VFS_INTERFACE_VERSION 45 @@ -1248,9 +1249,6 @@ struct vfs_fn_pointers { uint8_t **xattr_value); ssize_t (*fgetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, void *value, size_t size); ssize_t (*flistxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size); - int (*removexattr_fn)(struct vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name); int (*fremovexattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name); int (*fsetxattr_fn)(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name, const void *value, size_t size, int flags); @@ -1765,9 +1763,6 @@ ssize_t smb_vfs_call_fgetxattr(struct vfs_handle_struct *handle, ssize_t smb_vfs_call_flistxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size); -int smb_vfs_call_removexattr(struct vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name); int smb_vfs_call_fremovexattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name); int smb_vfs_call_lsetxattr(struct vfs_handle_struct *handle, const char *path, @@ -2177,9 +2172,6 @@ ssize_t vfs_not_implemented_listxattr(vfs_handle_struct *handle, ssize_t vfs_not_implemented_flistxattr(vfs_handle_struct *handle, struct files_struct *fsp, char *list, size_t size); -int vfs_not_implemented_removexattr(vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name); int vfs_not_implemented_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *name); int vfs_not_implemented_setxattr(vfs_handle_struct *handle, diff --git a/source3/include/vfs_macros.h b/source3/include/vfs_macros.h index dab0c306a68..fe26c8fa347 100644 --- a/source3/include/vfs_macros.h +++ b/source3/include/vfs_macros.h @@ -551,11 +551,6 @@ #define SMB_VFS_NEXT_FLISTXATTR(handle,fsp,list,size) \ smb_vfs_call_flistxattr((handle)->next,(fsp),(list),(size)) -#define SMB_VFS_REMOVEXATTR(conn,smb_fname,name) \ - smb_vfs_call_removexattr((conn)->vfs_handles,(smb_fname),(name)) -#define SMB_VFS_NEXT_REMOVEXATTR(handle,smb_fname,name) \ - smb_vfs_call_removexattr((handle)->next,(smb_fname),(name)) - #define SMB_VFS_FREMOVEXATTR(fsp,name) \ smb_vfs_call_fremovexattr((fsp)->conn->vfs_handles, (fsp), (name)) #define SMB_VFS_NEXT_FREMOVEXATTR(handle,fsp,name) \ diff --git a/source3/lib/adouble.c b/source3/lib/adouble.c index 39895aff3f8..8a34d6ba074 100644 --- a/source3/lib/adouble.c +++ b/source3/lib/adouble.c @@ -2099,8 +2099,7 @@ exit: ealen = -1; if (errno == EINVAL) { become_root(); - (void)SMB_VFS_REMOVEXATTR(handle->conn, - smb_fname, + (void)SMB_VFS_FREMOVEXATTR(smb_fname->fsp, AFPINFO_EA_NETATALK); unbecome_root(); errno = ENOENT; diff --git a/source3/modules/The_New_VFS.org b/source3/modules/The_New_VFS.org index 82ba2ea2519..afb2ed84f1c 100644 --- a/source3/modules/The_New_VFS.org +++ b/source3/modules/The_New_VFS.org @@ -276,7 +276,7 @@ whenever VFS access is done in a piecemeal fashion. | SMB_VFS_READLINKAT() | [[Symlink][Symlink]] | - | | SMB_VFS_REALPATH() | [[P2px][P2px]] | - | | SMB_VFS_RECVFILE() | [[fsp][fsp]] | - | -| SMB_VFS_REMOVEXATTR() | [[Path][Path]] | Todo | +| SMB_VFS_REMOVEXATTR() | [[Path][Path]] | - | | SMB_VFS_RENAMEAT() | [[Path][Path]] | Todo | | SMB_VFS_REWINDDIR() | [[fsp][fsp]] | - | | SMB_VFS_SEEKDIR() | [[fsp][fsp]] | - | diff --git a/source3/modules/The_New_VFS.txt b/source3/modules/The_New_VFS.txt index 711bfee4413..ecff08972d0 100644 --- a/source3/modules/The_New_VFS.txt +++ b/source3/modules/The_New_VFS.txt @@ -344,7 +344,7 @@ Table of Contents SMB_VFS_READLINKAT() [Symlink] - SMB_VFS_REALPATH() [P2px] - SMB_VFS_RECVFILE() [fsp] - - SMB_VFS_REMOVEXATTR() [Path] Todo + SMB_VFS_REMOVEXATTR() [Path] - SMB_VFS_RENAMEAT() [Path] Todo SMB_VFS_REWINDDIR() [fsp] - SMB_VFS_SEEKDIR() [fsp] - diff --git a/source3/modules/lib_vxfs.c b/source3/modules/lib_vxfs.c index 13b2e612a27..432eadd1865 100644 --- a/source3/modules/lib_vxfs.c +++ b/source3/modules/lib_vxfs.c @@ -121,27 +121,6 @@ int vxfs_removexattr_fd(int fd, const char *name) return ret; } -int vxfs_removexattr_path(const char *path, const char *name, bool is_dir) -{ - int ret, fd = -1; - - if (is_dir) { - fd = open(path, O_RDONLY|O_DIRECTORY); - } else { - fd = open(path, O_WRONLY); - } - if (fd == -1) { - DEBUG(10, ("file not opened: vxfs_removexattr_path for %s\n", - path)); - return -1; - } - - ret = vxfs_removexattr_fd(fd, name); - close(fd); - - return ret; -} - int vxfs_listxattr_fd(int fd, char *list, size_t size) { int ret; diff --git a/source3/modules/posixacl_xattr.c b/source3/modules/posixacl_xattr.c index a835f2e5ebe..6b0407b66ff 100644 --- a/source3/modules/posixacl_xattr.c +++ b/source3/modules/posixacl_xattr.c @@ -515,7 +515,6 @@ int posixacl_xattr_acl_set_fd(vfs_handle_struct *handle, int posixacl_xattr_acl_delete_def_file(vfs_handle_struct *handle, const struct smb_filename *smb_fname) { - return SMB_VFS_REMOVEXATTR(handle->conn, - smb_fname, + return SMB_VFS_FREMOVEXATTR(smb_fname->fsp, ACL_EA_DEFAULT); } diff --git a/source3/modules/vfs_cap.c b/source3/modules/vfs_cap.c index 4c65361e4e2..372acff5918 100644 --- a/source3/modules/vfs_cap.c +++ b/source3/modules/vfs_cap.c @@ -910,45 +910,6 @@ static ssize_t cap_fgetxattr(vfs_handle_struct *handle, struct files_struct *fsp return SMB_VFS_NEXT_FGETXATTR(handle, fsp, cappath, value, size); } -static int cap_removexattr(vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name) -{ - struct smb_filename *cap_smb_fname = NULL; - char *cappath = capencode(talloc_tos(), smb_fname->base_name); - char *capname = capencode(talloc_tos(), name); - int ret; - int saved_errno = 0; - - if (!cappath || !capname) { - errno = ENOMEM; - return -1; - } - cap_smb_fname = synthetic_smb_fname(talloc_tos(), - cappath, - NULL, - NULL, - smb_fname->twrp, - smb_fname->flags); - if (cap_smb_fname == NULL) { - TALLOC_FREE(cappath); - TALLOC_FREE(capname); - errno = ENOMEM; - return -1; - } - ret = SMB_VFS_NEXT_REMOVEXATTR(handle, cap_smb_fname, capname); - if (ret == -1) { - saved_errno = errno; - } - TALLOC_FREE(cappath); - TALLOC_FREE(capname); - TALLOC_FREE(cap_smb_fname); - if (saved_errno) { - errno = saved_errno; - } - return ret; -} - static int cap_fremovexattr(vfs_handle_struct *handle, struct files_struct *fsp, const char *path) { char *cappath = capencode(talloc_tos(), path); @@ -1071,7 +1032,6 @@ static struct vfs_fn_pointers vfs_cap_fns = { .getxattrat_send_fn = vfs_not_implemented_getxattrat_send, .getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv, .fgetxattr_fn = cap_fgetxattr, - .removexattr_fn = cap_removexattr, .fremovexattr_fn = cap_fremovexattr, .fsetxattr_fn = cap_fsetxattr, .create_dfs_pathat_fn = cap_create_dfs_pathat, diff --git a/source3/modules/vfs_catia.c b/source3/modules/vfs_catia.c index 8e648816c68..de291ba7c31 100644 --- a/source3/modules/vfs_catia.c +++ b/source3/modules/vfs_catia.c @@ -1241,63 +1241,6 @@ catia_getxattr(vfs_handle_struct *handle, return ret; } -static int -catia_removexattr(vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name) -{ - struct smb_filename *mapped_smb_fname = NULL; - char *mapped_name = NULL; - char *mapped_ea_name = NULL; - NTSTATUS status; - ssize_t ret; - int saved_errno = 0; - - status = catia_string_replace_allocate(handle->conn, - smb_fname->base_name, - &mapped_name, - vfs_translate_to_unix); - if (!NT_STATUS_IS_OK(status)) { - errno = map_errno_from_nt_status(status); - return -1; - } - - status = catia_string_replace_allocate(handle->conn, - name, &mapped_ea_name, vfs_translate_to_unix); - if (!NT_STATUS_IS_OK(status)) { - TALLOC_FREE(mapped_name); - errno = map_errno_from_nt_status(status); - return -1; - } - - mapped_smb_fname = synthetic_smb_fname(talloc_tos(), - mapped_name, - NULL, - &smb_fname->st, - smb_fname->twrp, - smb_fname->flags); - if (mapped_smb_fname == NULL) { - TALLOC_FREE(mapped_name); - TALLOC_FREE(mapped_ea_name); - errno = ENOMEM; - return -1; - } - - ret = SMB_VFS_NEXT_REMOVEXATTR(handle, mapped_smb_fname, - mapped_ea_name); - if (ret == -1) { - saved_errno = errno; - } - TALLOC_FREE(mapped_name); - TALLOC_FREE(mapped_ea_name); - TALLOC_FREE(mapped_smb_fname); - if (saved_errno != 0) { - errno = saved_errno; - } - - return ret; -} - static int catia_fstat(vfs_handle_struct *handle, files_struct *fsp, SMB_STRUCT_STAT *sbuf) @@ -2327,7 +2270,6 @@ static struct vfs_fn_pointers vfs_catia_fns = { .getxattr_fn = catia_getxattr, .getxattrat_send_fn = vfs_not_implemented_getxattrat_send, .getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv, - .removexattr_fn = catia_removexattr, .fgetxattr_fn = catia_fgetxattr, .flistxattr_fn = catia_flistxattr, .fremovexattr_fn = catia_fremovexattr, diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index 038258a1d8d..634222df764 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -1307,23 +1307,23 @@ static ssize_t cephwrap_flistxattr(struct vfs_handle_struct *handle, struct file return (ssize_t)ret; } -static int cephwrap_removexattr(struct vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name) -{ - int ret; - DBG_DEBUG("[CEPH] removexattr(%p, %s, %s)\n", handle, - smb_fname->base_name, name); - ret = ceph_removexattr(handle->data, smb_fname->base_name, name); - DBG_DEBUG("[CEPH] removexattr(...) = %d\n", ret); - WRAP_RETURN(ret); -} - static int cephwrap_fremovexattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name) { int ret; DBG_DEBUG("[CEPH] fremovexattr(%p, %p, %s)\n", handle, fsp, name); - ret = ceph_fremovexattr(handle->data, fsp_get_io_fd(fsp), name); + if (!fsp->fsp_flags.is_pathref) { + /* + * We can use an io_fd to remove xattrs. + */ + ret = ceph_fremovexattr(handle->data, fsp_get_io_fd(fsp), name); + } else { + /* + * This is no longer a handle based call. + */ + ret = ceph_removexattr(handle->data, + fsp->fsp_name->base_name, + name); + } DBG_DEBUG("[CEPH] fremovexattr(...) = %d\n", ret); WRAP_RETURN(ret); } @@ -1605,7 +1605,6 @@ static struct vfs_fn_pointers ceph_fns = { .getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv, .fgetxattr_fn = cephwrap_fgetxattr, .flistxattr_fn = cephwrap_flistxattr, - .removexattr_fn = cephwrap_removexattr, .fremovexattr_fn = cephwrap_fremovexattr, .fsetxattr_fn = cephwrap_fsetxattr, diff --git a/source3/modules/vfs_ceph_snapshots.c b/source3/modules/vfs_ceph_snapshots.c index 3211c1c7dce..7b2307b19ee 100644 --- a/source3/modules/vfs_ceph_snapshots.c +++ b/source3/modules/vfs_ceph_snapshots.c @@ -1298,27 +1298,6 @@ static ssize_t ceph_snap_gmt_getxattr(vfs_handle_struct *handle, return ret; } -static int ceph_snap_gmt_removexattr(vfs_handle_struct *handle, - const struct smb_filename *csmb_fname, - const char *aname) -{ - time_t timestamp = 0; - int ret; - - ret = ceph_snap_gmt_strip_snapshot(handle, - csmb_fname, - ×tamp, NULL, 0); - if (ret < 0) { - errno = -ret; - return -1; - } - if (timestamp != 0) { - errno = EROFS; - return -1; - } - return SMB_VFS_NEXT_REMOVEXATTR(handle, csmb_fname, aname); -} - static int ceph_snap_gmt_fsetxattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *aname, const void *value, @@ -1492,7 +1471,6 @@ static struct vfs_fn_pointers ceph_snap_fns = { .getxattr_fn = ceph_snap_gmt_getxattr, .getxattrat_send_fn = vfs_not_implemented_getxattrat_send, .getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv, - .removexattr_fn = ceph_snap_gmt_removexattr, .fsetxattr_fn = ceph_snap_gmt_fsetxattr, .chflags_fn = ceph_snap_gmt_chflags, .get_real_filename_fn = ceph_snap_gmt_get_real_filename, diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index 9a2c13d743b..a3557fe2d14 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -3636,13 +3636,6 @@ static ssize_t vfswrap_flistxattr(struct vfs_handle_struct *handle, struct files return listxattr(fsp->fsp_name->base_name, list, size); } -static int vfswrap_removexattr(struct vfs_handle_struct *handle, - const struct smb_filename *smb_fname, - const char *name) -{ - return removexattr(smb_fname->base_name, name); -} - static int vfswrap_fremovexattr(struct vfs_handle_struct *handle, struct files_struct *fsp, const char *name) { int fd = fsp_get_pathref_fd(fsp); @@ -3877,7 +3870,6 @@ static struct vfs_fn_pointers vfs_default_fns = { .getxattrat_recv_fn = vfswrap_getxattrat_recv, .fgetxattr_fn = vfswrap_fgetxattr, .flistxattr_fn = vfswrap_flistxattr, - .removexattr_fn = vfswrap_removexattr, .fremovexattr_fn = vfswrap_fremovexattr, .fsetxattr_fn = vfswrap_fsetxattr, diff --git a/source3/modules/vfs_fake_acls.c b/source3/modules/vfs_fake_acls.c index 716df540e47..08e7b667149 100644 --- a/source3/modules/vfs_fake_acls.c +++ b/source3/modules/vfs_fake_acls.c @@ -385,39 +385,22 @@ static int fake_acls_sys_acl_set_fd(vfs_handle_struct *handle, } static int fake_acls_sys_acl_delete_def_file(vfs_handle_struct *handle, - const struct smb_filename *smb_fname_in) + const struct smb_filename *smb_fname) { int ret; const char *name = FAKE_ACL_DEFAULT_XATTR; - TALLOC_CTX *frame = talloc_stackframe(); - struct smb_filename *smb_fname = cp_smb_filename_nostream(talloc_tos(), - smb_fname_in); - - if (smb_fname == NULL) { - TALLOC_FREE(frame); - errno = ENOMEM; - return -1; - } - - ret = SMB_VFS_NEXT_STAT(handle, smb_fname); - if (ret == -1) { - TALLOC_FREE(frame); - return -1; - } if (!S_ISDIR(smb_fname->st.st_ex_mode)) { errno = EINVAL; - TALLOC_FREE(frame); return -1; } - ret = SMB_VFS_NEXT_REMOVEXATTR(handle, smb_fname, name); + ret = SMB_VFS_NEXT_FREMOVEXATTR(handle, smb_fname->fsp, name); if (ret == -1 && errno == ENOATTR) { ret = 0; errno = 0; } - TALLOC_FREE(frame); return ret; } diff --git a/source3/modules/vfs_full_audit.c b/source3/modules/vfs_full_audit.c index ee26c6a5bfa..bbe5ea55dde 100644 --- a/source3/modules/vfs_full_audit.c +++ b/source3/modules/vfs_full_audit.c @@ -2838,24 +2838,6 @@ static ssize_t smb_full_audit_flistxattr(struct vfs_handle_struct *handle, return result; } -static int smb_full_audit_removexattr(struct vfs_handle_struct *handle, -- Samba Shared Repository