From f80d781628295e287dd79700acc72f272921c464 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 7 Feb 2014 10:19:26 -0800 Subject: [PATCH] s3: modules: streaminfo: As we have no VFS function SMB_VFS_LLISTXATTR we can't cope with a symlink when lp_posix_pathnames() is true. Fix bug : Bug 10429 - samba returns STATUS_OBJECT_NAME_NOT_FOUND when attempting to remove dangling symlink https://bugzilla.samba.org/show_bug.cgi?id=10429 Signed-off-by: Jeremy Allison --- source3/modules/vfs_streams_depot.c | 13 ++++++++++++- source3/modules/vfs_streams_xattr.c | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c index ae1af24..8ba07fc 100644 --- a/source3/modules/vfs_streams_depot.c +++ b/source3/modules/vfs_streams_depot.c @@ -877,8 +877,19 @@ static NTSTATUS streams_depot_streaminfo(vfs_handle_struct *handle, state.handle = handle; state.status = NT_STATUS_OK; - status = walk_streams(handle, smb_fname_base, NULL, collect_one_stream, + if (S_ISLNK(smb_fname_base->st.st_ex_mode)) { + /* + * Currently we do't have SMB_VFS_LLISTXATTR + * inside the VFS which means there's no way + * to cope with a symlink when lp_posix_pathnames(). + * returns true. For now ignore links. + * FIXME - by adding SMB_VFS_LLISTXATTR. JRA. + */ + status = NT_STATUS_OK; + } else { + status = walk_streams(handle, smb_fname_base, NULL, collect_one_stream, &state); + } if (!NT_STATUS_IS_OK(status)) { TALLOC_FREE(state.streams); diff --git a/source3/modules/vfs_streams_xattr.c b/source3/modules/vfs_streams_xattr.c index 355c47c..5e9bd3e 100644 --- a/source3/modules/vfs_streams_xattr.c +++ b/source3/modules/vfs_streams_xattr.c @@ -793,8 +793,19 @@ static NTSTATUS streams_xattr_streaminfo(vfs_handle_struct *handle, state.handle = handle; state.status = NT_STATUS_OK; - status = walk_xattr_streams(handle->conn, fsp, fname, + if (S_ISLNK(sbuf.st_ex_mode)) { + /* + * Currently we do't have SMB_VFS_LLISTXATTR + * inside the VFS which means there's no way + * to cope with a symlink when lp_posix_pathnames(). + * returns true. For now ignore links. + * FIXME - by adding SMB_VFS_LLISTXATTR. JRA. + */ + status = NT_STATUS_OK; + } else { + status = walk_xattr_streams(handle->conn, fsp, fname, collect_one_stream, &state); + } if (!NT_STATUS_IS_OK(status)) { TALLOC_FREE(state.streams); -- 1.9.0.rc1.175.g0b1dcb5