summaryrefslogtreecommitdiff
path: root/source3/torture/cmd_vfs.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2012-08-16 16:50:47 +1000
committerAndrew Bartlett <abartlet@samba.org>2012-08-17 02:35:49 +0200
commit6b7a99107d956651fae43a7e62d1fbf69d97d0c7 (patch)
treeb356d2832324906e4890d66285e6fb9e4d377645 /source3/torture/cmd_vfs.c
parent5251d07e625d945f90b746d4dabcfe6d98cc5d89 (diff)
downloadsamba-6b7a99107d956651fae43a7e62d1fbf69d97d0c7.tar.gz
samba-6b7a99107d956651fae43a7e62d1fbf69d97d0c7.tar.bz2
samba-6b7a99107d956651fae43a7e62d1fbf69d97d0c7.zip
s3-torture: Allow vfstest to set ACLs on a directory
Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Fri Aug 17 02:35:49 CEST 2012 on sn-devel-104
Diffstat (limited to 'source3/torture/cmd_vfs.c')
-rw-r--r--source3/torture/cmd_vfs.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/source3/torture/cmd_vfs.c b/source3/torture/cmd_vfs.c
index 9c19f2f6d2..236b9c09f8 100644
--- a/source3/torture/cmd_vfs.c
+++ b/source3/torture/cmd_vfs.c
@@ -1459,8 +1459,6 @@ static NTSTATUS cmd_set_nt_acl(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int a
mode = 00400;
- flags = O_RDWR;
-
fsp = talloc_zero(vfs, struct files_struct);
if (fsp == NULL) {
return NT_STATUS_NO_MEMORY;
@@ -1481,7 +1479,17 @@ static NTSTATUS cmd_set_nt_acl(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int a
fsp->fsp_name = smb_fname;
- fsp->fh->fd = SMB_VFS_OPEN(vfs->conn, smb_fname, fsp, flags, mode);
+#ifdef O_DIRECTORY
+ flags = O_RDONLY|O_DIRECTORY;
+#else
+ /* POSIX allows us to open a directory with O_RDONLY. */
+ flags = O_RDONLY;
+#endif
+
+ fsp->fh->fd = SMB_VFS_OPEN(vfs->conn, smb_fname, fsp, O_RDWR, mode);
+ if (fsp->fh->fd == -1 && errno == EISDIR) {
+ fsp->fh->fd = SMB_VFS_OPEN(vfs->conn, smb_fname, fsp, flags, mode);
+ }
if (fsp->fh->fd == -1) {
printf("open: error=%d (%s)\n", errno, strerror(errno));
TALLOC_FREE(fsp);
@@ -1497,9 +1505,6 @@ static NTSTATUS cmd_set_nt_acl(struct vfs_state *vfs, TALLOC_CTX *mem_ctx, int a
smb_fname_str_dbg(smb_fname),
strerror(errno) ));
status = map_nt_error_from_unix(errno);
- } else if (S_ISDIR(smb_fname->st.st_ex_mode)) {
- errno = EISDIR;
- status = NT_STATUS_FILE_IS_A_DIRECTORY;
}
if (!NT_STATUS_IS_OK(status)) {