s3:libsmb/clireadwrite: calculate cli_read_max_bufsize() correct based on max_xmit
authorStefan Metzmacher <metze@samba.org>
Wed, 8 Jun 2011 16:59:39 +0000 (18:59 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 10 Jun 2011 17:27:05 +0000 (19:27 +0200)
This is important in order to support DCERPC over ncacn_np against NT4 servers,
where max_xmit is just 4356.

metze

source3/libsmb/clireadwrite.c

index c19151e5b818c3f9341f5c1b06dcbae239306ee8..e8baeba588cd08ffce02e94d84fe5c45a25521d9 100644 (file)
 ****************************************************************************/
 static size_t cli_read_max_bufsize(struct cli_state *cli)
 {
+       size_t data_offset = smb_size - 4;
+       size_t wct = 12;
+
+       size_t useable_space;
+
        if (!client_is_signing_on(cli) && !cli_encryption_on(cli)
            && (cli->server_posix_capabilities & CIFS_UNIX_LARGE_READ_CAP)) {
                return CLI_SAMBA_MAX_POSIX_LARGE_READX_SIZE;
@@ -37,7 +42,13 @@ static size_t cli_read_max_bufsize(struct cli_state *cli)
                        ? CLI_SAMBA_MAX_LARGE_READX_SIZE
                        : CLI_WINDOWS_MAX_LARGE_READX_SIZE;
        }
-       return (cli->max_xmit - (smb_size+32)) & ~1023;
+
+       data_offset += wct * sizeof(uint16_t);
+       data_offset += 1; /* pad */
+
+       useable_space = cli->max_xmit - data_offset;
+
+       return useable_space;
 }
 
 /****************************************************************************