From 6ce084f092fc1b991e5c7bc3f56fd98a4293caae Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sun, 19 Aug 2012 21:58:56 +1000 Subject: s3-smbd: Do not look for EA information on a stream The estimated EA size needs to be of the main file. However, the fsp may point to the stream, so we need to ignore it if this is the case. This may mean we estimate wrong if there has been a rename. Andrew Bartlett --- source3/smbd/trans2.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'source3/smbd/trans2.c') diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 152ef73c9b..0be45d01f9 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -501,12 +501,14 @@ static unsigned int estimate_ea_size(connection_struct *conn, files_struct *fsp, return 0; } mem_ctx = talloc_stackframe(); - status = get_full_smb_filename(mem_ctx, smb_fname, &fname); - if (!NT_STATUS_IS_OK(status)) { - TALLOC_FREE(mem_ctx); - return 0; + + /* If this is a stream fsp, then we need to instead find the + * estimated ea len from the main file, not the stream + * (streams cannot have EAs) */ + if (is_ntfs_stream_smb_fname(smb_fname)) { + fsp = NULL; } - (void)get_ea_list_from_file(mem_ctx, conn, fsp, fname, &total_ea_len); + (void)get_ea_list_from_file(mem_ctx, conn, fsp, smb_fname->base_name, &total_ea_len); TALLOC_FREE(mem_ctx); return total_ea_len; } @@ -4650,7 +4652,7 @@ NTSTATUS smbd_do_qfilepathinfo(connection_struct *conn, { int len; unsigned int ea_size = - estimate_ea_size(conn, fsp, smb_fname->base_name); + estimate_ea_size(conn, fsp, smb_fname); DEBUG(10,("smbd_do_qfilepathinfo: SMB2_FILE_ALL_INFORMATION\n")); put_long_date_timespec(conn->ts_res,pdata+0x00,create_time_ts); put_long_date_timespec(conn->ts_res,pdata+0x08,atime_ts); -- cgit