r20059: james was asking about CAP_LARGE_READX and reads close to the 64k
authorAndrew Tridgell <tridge@samba.org>
Thu, 7 Dec 2006 04:02:20 +0000 (04:02 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:28:56 +0000 (14:28 -0500)
boundary. This test shows that both for Samba4 and w2k3, reads larger
than or equal to 64k don't work (return zero bytes).

Not that I claim this is very useful behaviour :-)
(This used to be commit a10fa12ff5657a96e41b309558786780f294a75f)

source4/torture/raw/read.c

index da9580a472bd5db0588ba5a056ca41fb26768156..483f1c6677bae549a3f44b16d80fb8ce415a6f7d 100644 (file)
@@ -513,6 +513,26 @@ static BOOL test_readx(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        CHECK_VALUE(io.readx.out.nread, io.readx.in.maxcnt);
        CHECK_BUFFER(buf, seed, io.readx.out.nread);
 
+       if (cli->transport->negotiate.capabilities & CAP_LARGE_READX) {
+               printf("Trying large readx\n");
+               io.readx.in.offset = 0;
+               io.readx.in.mincnt = 0;
+               io.readx.in.maxcnt = 0x10000 - 1;
+               status = smb_raw_read(cli->tree, &io);
+               CHECK_STATUS(status, NT_STATUS_OK);
+               CHECK_VALUE(io.readx.out.nread, 0xFFFF);
+
+               io.readx.in.maxcnt = 0x10000;
+               status = smb_raw_read(cli->tree, &io);
+               CHECK_STATUS(status, NT_STATUS_OK);
+               CHECK_VALUE(io.readx.out.nread, 0);
+
+               io.readx.in.maxcnt = 0x10001;
+               status = smb_raw_read(cli->tree, &io);
+               CHECK_STATUS(status, NT_STATUS_OK);
+               CHECK_VALUE(io.readx.out.nread, 0);
+       }
+
        printf("Trying locked region\n");
        cli->session->pid++;
        if (NT_STATUS_IS_ERR(smbcli_lock(cli->tree, fnum, 103, 1, 0, WRITE_LOCK))) {