}
allocation_size = SMB_VFS_GET_ALLOC_SIZE(conn, NULL, &smb_fname->st);
- status = SMB_VFS_FREADDIR_ATTR(smb_fname->fsp,
- ctx,
- &readdir_attr_data);
- if (!NT_STATUS_IS_OK(status)) {
- if (!NT_STATUS_EQUAL(NT_STATUS_NOT_SUPPORTED, status)) {
- return status;
+ /*
+ * Skip SMB_VFS_FREADDIR_ATTR if the directory entry is a symlink or
+ * a DFS symlink.
+ */
+ if (smb_fname->fsp != NULL &&
+ !(mode & FILE_ATTRIBUTE_REPARSE_POINT)) {
+ status = SMB_VFS_FREADDIR_ATTR(smb_fname->fsp,
+ ctx,
+ &readdir_attr_data);
+ if (!NT_STATUS_IS_OK(status)) {
+ if (!NT_STATUS_EQUAL(NT_STATUS_NOT_SUPPORTED,
+ status)) {
+ return status;
+ }
}
}