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 /source3/modules | |
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)
Diffstat (limited to 'source3/modules')
-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 |
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; } |