svn commit: samba r20077 - in branches/SAMBA_4_0/source/libcli/raw: .

tridge at samba.org tridge at samba.org
Fri Dec 8 03:47:03 GMT 2006


Author: tridge
Date: 2006-12-08 03:47:02 +0000 (Fri, 08 Dec 2006)
New Revision: 20077

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20077

Log:

support large readx replies, as done by samba3 (and the snia spec),
but not done by windows servers

Modified:
   branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c


Changeset:
Modified: branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c
===================================================================
--- branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c	2006-12-08 00:26:44 UTC (rev 20076)
+++ branches/SAMBA_4_0/source/libcli/raw/rawreadwrite.c	2006-12-08 03:47:02 UTC (rev 20077)
@@ -161,6 +161,20 @@
 		parms->readx.out.remaining       = SVAL(req->in.vwv, VWV(2));
 		parms->readx.out.compaction_mode = SVAL(req->in.vwv, VWV(3));
 		parms->readx.out.nread = SVAL(req->in.vwv, VWV(5));
+
+		/* handle oversize replies for non-chained readx replies with
+		   CAP_LARGE_READX. The snia spec has must to answer for. */
+		if ((req->tree->session->transport->negotiate.capabilities & CAP_LARGE_READX)
+		    && CVAL(req->in.vwv, VWV(0)) == SMB_CHAIN_NONE &&
+		    req->in.size >= 0x10000) {
+			parms->readx.out.nread += (SVAL(req->in.vwv, VWV(7)) << 16);
+			if (req->in.hdr + SVAL(req->in.vwv, VWV(6)) +
+			    parms->readx.out.nread <= 
+			    req->in.buffer + req->in.size) {
+				req->in.data_size += (SVAL(req->in.vwv, VWV(7)) << 16);
+			}
+		}
+
 		if (parms->readx.out.nread > MAX(parms->readx.in.mincnt, parms->readx.in.maxcnt) ||
 		    !smbcli_raw_pull_data(req, req->in.hdr + SVAL(req->in.vwv, VWV(6)), 
 				       parms->readx.out.nread, 



More information about the samba-cvs mailing list