summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2009-08-04 16:01:11 +1000
committerAndrew Tridgell <tridge@samba.org>2009-08-04 16:01:11 +1000
commitff388611f461b4a4ee044ce86aedda9ce18dfc97 (patch)
treed1666adc6a27637b1ccb4d4030a32b532c0e24cb
parent3641978dfa88398dbc494845fe611dd87f2317b7 (diff)
downloadsamba-ff388611f461b4a4ee044ce86aedda9ce18dfc97.tar.gz
samba-ff388611f461b4a4ee044ce86aedda9ce18dfc97.tar.bz2
samba-ff388611f461b4a4ee044ce86aedda9ce18dfc97.zip
fixed support for readx greater than 64k
This fixes bug 6547, where smbclient in S3 reads more than 64k at a time with readx.
-rw-r--r--source4/ntvfs/posix/pvfs_read.c4
-rw-r--r--source4/smb_server/smb/reply.c3
2 files changed, 4 insertions, 3 deletions
diff --git a/source4/ntvfs/posix/pvfs_read.c b/source4/ntvfs/posix/pvfs_read.c
index d9080d632d..75fba3c90d 100644
--- a/source4/ntvfs/posix/pvfs_read.c
+++ b/source4/ntvfs/posix/pvfs_read.c
@@ -59,8 +59,8 @@ NTSTATUS pvfs_read(struct ntvfs_module_context *ntvfs,
}
maxcnt = rd->readx.in.maxcnt;
- if (maxcnt > UINT16_MAX && req->ctx->protocol < PROTOCOL_SMB2) {
- maxcnt = 0;
+ if (maxcnt > 2*UINT16_MAX && req->ctx->protocol < PROTOCOL_SMB2) {
+ return NT_STATUS_INVALID_PARAMETER;
}
status = pvfs_check_lock(pvfs, f, req->smbpid,
diff --git a/source4/smb_server/smb/reply.c b/source4/smb_server/smb/reply.c
index ec7b6783fd..0433d3582f 100644
--- a/source4/smb_server/smb/reply.c
+++ b/source4/smb_server/smb/reply.c
@@ -831,7 +831,8 @@ static void reply_read_and_X_send(struct ntvfs_request *ntvfs)
SMBSRV_VWV_RESERVED(4, 1);
SSVAL(req->out.vwv, VWV(5), io->readx.out.nread);
SSVAL(req->out.vwv, VWV(6), PTR_DIFF(io->readx.out.data, req->out.hdr));
- SMBSRV_VWV_RESERVED(7, 5);
+ SSVAL(req->out.vwv, VWV(7), (io->readx.out.nread>>16));
+ SMBSRV_VWV_RESERVED(8, 4);
smbsrv_chain_reply(req);
}