From cc3bdaaf0a5586e0f840466719f9f8387c5cddd0 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 15 Aug 2012 22:21:48 +1000 Subject: s3-vfs: Avoid loops in VFS modules: call _NEXT functions in xattr emulation We need to call the next module in the stack otherwise we will loop if the stat call is in turn implemented in terms of extended attribute lookup. Andrew Bartlett --- source3/modules/vfs_posix_eadb.c | 4 ++-- source3/modules/vfs_xattr_tdb.c | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source3/modules/vfs_posix_eadb.c b/source3/modules/vfs_posix_eadb.c index e1b90ffbc6..c8bebc4c0f 100644 --- a/source3/modules/vfs_posix_eadb.c +++ b/source3/modules/vfs_posix_eadb.c @@ -293,9 +293,9 @@ static int posix_eadb_unlink(vfs_handle_struct *handle, } if (lp_posix_pathnames()) { - ret = SMB_VFS_LSTAT(handle->conn, smb_fname_tmp); + ret = SMB_VFS_NEXT_LSTAT(handle, smb_fname_tmp); } else { - ret = SMB_VFS_STAT(handle->conn, smb_fname_tmp); + ret = SMB_VFS_NEXT_STAT(handle, smb_fname_tmp); } if (ret == -1) { goto out; diff --git a/source3/modules/vfs_xattr_tdb.c b/source3/modules/vfs_xattr_tdb.c index f09eec2cd8..80db90441d 100644 --- a/source3/modules/vfs_xattr_tdb.c +++ b/source3/modules/vfs_xattr_tdb.c @@ -76,7 +76,7 @@ static ssize_t xattr_tdb_fgetxattr(struct vfs_handle_struct *handle, SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, TALLOC_FREE(frame); return -1); - if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) { + if (SMB_VFS_NEXT_FSTAT(handle, fsp, &sbuf) == -1) { TALLOC_FREE(frame); return -1; } @@ -128,7 +128,7 @@ static int xattr_tdb_fsetxattr(struct vfs_handle_struct *handle, SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) { + if (SMB_VFS_NEXT_FSTAT(handle, fsp, &sbuf) == -1) { return -1; } @@ -165,7 +165,7 @@ static ssize_t xattr_tdb_flistxattr(struct vfs_handle_struct *handle, SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) { + if (SMB_VFS_NEXT_FSTAT(handle, fsp, &sbuf) == -1) { return -1; } @@ -201,7 +201,7 @@ static int xattr_tdb_fremovexattr(struct vfs_handle_struct *handle, SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_FSTAT(fsp, &sbuf) == -1) { + if (SMB_VFS_NEXT_FSTAT(handle, fsp, &sbuf) == -1) { return -1; } @@ -272,9 +272,9 @@ static int xattr_tdb_unlink(vfs_handle_struct *handle, } if (lp_posix_pathnames()) { - ret = SMB_VFS_LSTAT(handle->conn, smb_fname_tmp); + ret = SMB_VFS_NEXT_LSTAT(handle, smb_fname_tmp); } else { - ret = SMB_VFS_STAT(handle->conn, smb_fname_tmp); + ret = SMB_VFS_NEXT_STAT(handle, smb_fname_tmp); } if (ret == -1) { goto out; -- cgit