summaryrefslogtreecommitdiff
path: root/source3/smbd/nttrans.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2009-09-14 15:30:05 -0700
committerJeremy Allison <jra@samba.org>2009-09-14 15:30:05 -0700
commitca2c93b9e578fd9cd565f934b8910d6c738d787b (patch)
tree47393ccd730acf6e5dc40029427a7d6212d05219 /source3/smbd/nttrans.c
parentf31138ecc778db42b1aa7ce634425a1df663b0eb (diff)
downloadsamba-ca2c93b9e578fd9cd565f934b8910d6c738d787b.tar.gz
samba-ca2c93b9e578fd9cd565f934b8910d6c738d787b.tar.bz2
samba-ca2c93b9e578fd9cd565f934b8910d6c738d787b.zip
Fix bug 6494 - Incorrect FileStatus returned in NT_CREATE_ANDX.
Lookup the EA and Stream status on CreateX. Jeremy.
Diffstat (limited to 'source3/smbd/nttrans.c')
-rw-r--r--source3/smbd/nttrans.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index 434bf34e40..1b981578e3 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -623,7 +623,25 @@ void reply_ntcreate_and_X(struct smb_request *req)
SOFF_T(p,0,file_len);
p += 8;
if (flags & EXTENDED_RESPONSE_REQUIRED) {
- SSVAL(p,2,0x7);
+ uint16_t file_status = (NO_EAS|NO_SUBSTREAMS|NO_REPARSETAG);
+ size_t num_names = 0;
+ unsigned int num_streams;
+ struct stream_struct *streams = NULL;
+
+ /* Do we have any EA's ? */
+ status = get_ea_names_from_file(ctx, conn, fsp,
+ smb_fname->base_name, NULL, &num_names);
+ if (NT_STATUS_IS_OK(status) && num_names) {
+ file_status &= ~NO_EAS;
+ }
+ status = SMB_VFS_STREAMINFO(conn, NULL, smb_fname->base_name, ctx,
+ &num_streams, &streams);
+ /* There is always one stream, ::$DATA. */
+ if (NT_STATUS_IS_OK(status) && num_streams > 1) {
+ file_status &= ~NO_SUBSTREAMS;
+ }
+ TALLOC_FREE(streams);
+ SSVAL(p,2,file_status);
}
p += 4;
SCVAL(p,0,fsp->is_directory ? 1 : 0);