summaryrefslogtreecommitdiff
path: root/source3/modules
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2009-10-19 08:39:23 +0200
committerKarolin Seeger <kseeger@samba.org>2009-10-20 15:00:35 +0200
commit76b4b06985d1c0b285edbafdfb772b73a2035b4f (patch)
treecf84d14fec040a996f6af0458d3a83d937c60dce /source3/modules
parentab0f2141706520cec0d7d52ce7cc0a18055c4864 (diff)
downloadsamba-76b4b06985d1c0b285edbafdfb772b73a2035b4f.tar.gz
Fix symlink calls in all vfs modules.
Additional patch to fix bug #6769. (cherry picked from commit d8c7a5aafe0c17c69013766022418edcec481f8c)
Diffstat (limited to 'source3/modules')
-rw-r--r--source3/modules/nfs4_acls.c8
-rw-r--r--source3/modules/vfs_afsacl.c8
-rw-r--r--source3/modules/vfs_hpuxacl.c8
-rw-r--r--source3/modules/vfs_xattr_tdb.c52
4 files changed, 67 insertions, 9 deletions
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;
}