From 15fa043b7d362ee197835c0a72a936684c774472 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 26 Mar 2013 15:54:31 -0700 Subject: Change estimate_ea_size() to correctly estimate the EA size over SMB2. Signed-off-by: Jeremy Allison Reviewed-by: David Disseldorp --- source3/smbd/trans2.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 61252ba507..83988583b7 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -535,6 +535,26 @@ static unsigned int estimate_ea_size(connection_struct *conn, files_struct *fsp, fsp = NULL; } (void)get_ea_list_from_file_path(mem_ctx, conn, fsp, smb_fname->base_name, &total_ea_len, &ea_list); + if(conn->sconn->using_smb2) { + NTSTATUS status; + unsigned int ret_data_size; + /* + * We're going to be using fill_ea_chained_buffer() to + * marshall EA's - this size is significantly larger + * than the SMB1 buffer. Re-calculate the size without + * marshalling. + */ + status = fill_ea_chained_buffer(mem_ctx, + NULL, + 0, + &ret_data_size, + conn, + ea_list); + if (!NT_STATUS_IS_OK(status)) { + ret_data_size = 0; + } + total_ea_len = ret_data_size; + } TALLOC_FREE(mem_ctx); return total_ea_len; } -- cgit