Change estimate_ea_size() to correctly estimate the EA size over SMB2.
authorJeremy Allison <jra@samba.org>
Tue, 26 Mar 2013 22:54:31 +0000 (15:54 -0700)
committerDavid Disseldorp <ddiss@samba.org>
Tue, 2 Apr 2013 18:06:38 +0000 (20:06 +0200)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: David Disseldorp <ddiss@suse.de>
source3/smbd/trans2.c

index 61252ba50736f306f4d91f368abbfb4d2ed43d0d..83988583b7387e5d682dca92a0ba490a4ae71e1c 100644 (file)
@@ -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;
 }