diff options
author | Jeremy Allison <jra@samba.org> | 2009-10-19 08:39:23 +0200 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2009-10-20 15:00:35 +0200 |
commit | 76b4b06985d1c0b285edbafdfb772b73a2035b4f (patch) | |
tree | cf84d14fec040a996f6af0458d3a83d937c60dce | |
parent | ab0f2141706520cec0d7d52ce7cc0a18055c4864 (diff) | |
download | samba-76b4b06985d1c0b285edbafdfb772b73a2035b4f.tar.gz |
Fix symlink calls in all vfs modules.
Additional patch to fix bug #6769.
(cherry picked from commit d8c7a5aafe0c17c69013766022418edcec481f8c)
-rw-r--r-- | source3/Makefile.in | 6 | ||||
-rw-r--r-- | source3/configure.in | 4 | ||||
-rw-r--r-- | source3/modules/nfs4_acls.c | 8 | ||||
-rw-r--r-- | source3/modules/vfs_afsacl.c | 8 | ||||
-rw-r--r-- | source3/modules/vfs_hpuxacl.c | 8 | ||||
-rw-r--r-- | source3/modules/vfs_xattr_tdb.c | 52 | ||||
-rwxr-xr-x | source3/script/tests/test_local_s3.sh | 6 |
7 files changed, 78 insertions, 14 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index 97b86fc3f43..1484e111d94 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -212,7 +212,7 @@ BIN_PROGS4 = bin/ldbedit@EXEEXT@ bin/ldbsearch@EXEEXT@ bin/ldbadd@EXEEXT@ \ TORTURE_PROGS = bin/smbtorture@EXEEXT@ bin/msgtest@EXEEXT@ \ bin/masktest@EXEEXT@ bin/locktest@EXEEXT@ \ bin/locktest2@EXEEXT@ bin/nsstest@EXEEXT@ bin/vfstest@EXEEXT@ \ - bin/pdbtest@EXEEXT@ bin/talloctort@EXEEXT@ bin/replacetort@EXEEXT@ \ + bin/pdbtest@EXEEXT@ @BIN_TALLOCTORT@ bin/replacetort@EXEEXT@ \ bin/tdbtorture@EXEEXT@ \ bin/smbconftort@EXEEXT@ bin/vlp@EXEEXT@ @@ -220,7 +220,7 @@ BIN_PROGS = @EXTRA_BIN_PROGS@ \ $(BIN_PROGS1) $(BIN_PROGS2) $(BIN_PROGS3) $(BIN_PROGS4) EVERYTHING_PROGS = bin/debug2html@EXEEXT@ bin/smbfilter@EXEEXT@ \ - bin/talloctort@EXEEXT@ bin/replacetort@EXEEXT@ \ + @BIN_TALLOCTORT@ bin/replacetort@EXEEXT@ \ bin/log2pcap@EXEEXT@ \ bin/vlp@EXEEXT@ bin/smbiconv@EXEEXT@ \ bin/dbwrap_tool@EXEEXT@ @@ -1276,7 +1276,7 @@ samba3-idl:: ##################################################################### -everything:: all libtalloc libsmbclient libnetapi debug2html smbfilter talloctort replacetort smbconftort modules torture \ +everything:: all libtalloc libsmbclient libnetapi debug2html smbfilter @TALLOCTORT@ replacetort smbconftort modules torture \ $(EVERYTHING_PROGS) .SUFFIXES: diff --git a/source3/configure.in b/source3/configure.in index 74012ed7a3d..dde0c6cf001 100644 --- a/source3/configure.in +++ b/source3/configure.in @@ -4750,6 +4750,10 @@ then LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}" done AC_SUBST(LIBTALLOC_OBJ0) + BIN_TALLOCTORT="bin/talloctort" + AC_SUBST(BIN_TALLOCTORT) + TALLOCTORT="talloctort" + AC_SUBST(TALLOCTORT) else LIBTALLOC_LIBS="${TALLOC_LIBS}" fi diff --git a/source3/modules/nfs4_acls.c b/source3/modules/nfs4_acls.c index 462e59313ab..e58b2945b8b 100644 --- a/source3/modules/nfs4_acls.c +++ b/source3/modules/nfs4_acls.c @@ -165,10 +165,16 @@ static int smbacl4_GetFileOwner(struct connection_struct *conn, const char *filename, SMB_STRUCT_STAT *psbuf) { + int ret; memset(psbuf, 0, sizeof(SMB_STRUCT_STAT)); /* Get the stat struct for the owner info. */ - if (SMB_VFS_STAT(conn, filename, psbuf) != 0) + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(conn, filename, psbuf); + } else { + ret = SMB_VFS_STAT(conn, filename, psbuf); + } + if (ret == -1) { DEBUG(8, ("SMB_VFS_STAT failed with error %s\n", strerror(errno))); diff --git a/source3/modules/vfs_afsacl.c b/source3/modules/vfs_afsacl.c index 8c89d2fd9f9..9588c2daf04 100644 --- a/source3/modules/vfs_afsacl.c +++ b/source3/modules/vfs_afsacl.c @@ -660,9 +660,15 @@ static size_t afs_to_nt_acl(struct afs_acl *afs_acl, struct security_descriptor **ppdesc) { SMB_STRUCT_STAT sbuf; + int ret; /* Get the stat struct for the owner info. */ - if(SMB_VFS_STAT(conn, name, &sbuf) != 0) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(conn, name, &sbuf); + } else { + ret = SMB_VFS_STAT(conn, name, &sbuf); + } + if (ret == -1) { return 0; } diff --git a/source3/modules/vfs_hpuxacl.c b/source3/modules/vfs_hpuxacl.c index f9293405fb4..e75a9c64600 100644 --- a/source3/modules/vfs_hpuxacl.c +++ b/source3/modules/vfs_hpuxacl.c @@ -248,7 +248,13 @@ int hpuxacl_sys_acl_set_file(vfs_handle_struct *handle, * that has _not_ been specified in "type" from the file first * and concatenate it with the acl provided. */ - if (SMB_VFS_STAT(handle->conn, name, &s) != 0) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(handle->conn, name, &s); + } else { + ret = SMB_VFS_STAT(handle->conn, name, &s); + } + + if (ret != 0) { DEBUG(10, ("Error in stat call: %s\n", strerror(errno))); goto done; } diff --git a/source3/modules/vfs_xattr_tdb.c b/source3/modules/vfs_xattr_tdb.c index 4e37ed6477b..3fe8f6d1f62 100644 --- a/source3/modules/vfs_xattr_tdb.c +++ b/source3/modules/vfs_xattr_tdb.c @@ -212,10 +212,17 @@ static ssize_t xattr_tdb_getxattr(struct vfs_handle_struct *handle, SMB_STRUCT_STAT sbuf; struct file_id id; struct db_context *db; + int ret; SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf); + } else { + ret = SMB_VFS_STAT(handle->conn, path, &sbuf); + } + + if (ret == -1) { return -1; } @@ -334,10 +341,17 @@ static int xattr_tdb_setxattr(struct vfs_handle_struct *handle, SMB_STRUCT_STAT sbuf; struct file_id id; struct db_context *db; + int ret; SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf); + } else { + ret = SMB_VFS_STAT(handle->conn, path, &sbuf); + } + + if (ret == -1) { return -1; } @@ -439,10 +453,17 @@ static ssize_t xattr_tdb_listxattr(struct vfs_handle_struct *handle, SMB_STRUCT_STAT sbuf; struct file_id id; struct db_context *db; + int ret; SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf); + } else { + ret = SMB_VFS_STAT(handle->conn, path, &sbuf); + } + + if (ret == -1) { return -1; } @@ -539,10 +560,17 @@ static int xattr_tdb_removexattr(struct vfs_handle_struct *handle, SMB_STRUCT_STAT sbuf; struct file_id id; struct db_context *db; + int ret; SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf); + } else { + ret = SMB_VFS_STAT(handle->conn, path, &sbuf); + } + + if (ret == -1) { return -1; } @@ -621,7 +649,13 @@ static int xattr_tdb_unlink(vfs_handle_struct *handle, const char *path) SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf); + } else { + ret = SMB_VFS_STAT(handle->conn, path, &sbuf); + } + + if (ret == -1) { return -1; } @@ -660,7 +694,13 @@ static int xattr_tdb_rmdir(vfs_handle_struct *handle, const char *path) SMB_VFS_HANDLE_GET_DATA(handle, db, struct db_context, return -1); - if (SMB_VFS_STAT(handle->conn, path, &sbuf) == -1) { + if (lp_posix_pathnames()) { + ret = SMB_VFS_LSTAT(handle->conn, path, &sbuf); + } else { + ret = SMB_VFS_STAT(handle->conn, path, &sbuf); + } + + if (ret == -1) { return -1; } diff --git a/source3/script/tests/test_local_s3.sh b/source3/script/tests/test_local_s3.sh index 18407790853..79e48483efa 100755 --- a/source3/script/tests/test_local_s3.sh +++ b/source3/script/tests/test_local_s3.sh @@ -16,8 +16,10 @@ incdir=`dirname $0` failed=0 -testit "talloctort" $VALGRIND $BINDIR/talloctort || \ - failed=`expr $failed + 1` +test -x $BINDIR/talloctort && { + testit "talloctort" $VALGRIND $BINDIR/talloctort || \ + failed=`expr $failed + 1` +} testit "replacetort" $VALGRIND $BINDIR/replacetort || \ failed=`expr $failed + 1` |